C++ 内存管理:栈、堆、BSS、data、text

C++是一门追求极致性能的语言,合理的内存管理能够缔造出极致性能的代码,否则,不合理的内存管理,会成为日常隐患,产生一系列的BUG。

Linux下操作系统程序地址空间的内存管理分布图如下所示:

 C++程序在执行时,内存区域主要可以分为四个部分:栈、堆、全局区(静态数据区)、代码段。

栈区:

由编译器自动开辟与释放,存放函数的参数值、局部变量等,栈区是由高地址位向低地址位增长,是一块连续的内存区域,一般最大尺寸为2M。

堆区:

由程序员使用malloc/free进行申请和释放,堆区是由低地址位向高地址位增长,采用链式存储结构,频繁的使用malloc/free容易造成内存空间不连续,产生内存碎片。用户对堆区申请空间时按照一定的算法搜索周围足够大的空间,因此开辟空间效率远低于栈区。

BSS段:

未初始化或初始化为0的全局变量和静态变量。此块内存属于静态分配,程序结束后静态变量资源由系统自动释放。(内核在程序开始前将BSS区域数据全部置0)

数据段:

存放已初始化的全局变量和静态变量,此块内存属于静态分配,程序结束后静态变量资源由系统自动释放。此外,字符串常量可看作是一个没有命名的字符串且为常量,也存放在静态数据区。

代码段:

存放程序执行代码的一块内存区域。区域大小在程序运行前已经被确定,且内存区域只读。代码段中可能包含一些只读常数变量。

参考博客:C++-内存管理_skrskr66的博客-CSDN博客_c++内存管理参考博客:https://blog.csdn.net/jing0611/article/details/4030237在最开始的学习中,老师一直在说一个关于C++的话题。**C++是一个极度追求性能的语言。**通过学习,这不是开玩笑,在我所学习的语言中,对内存的使用有如此的执着的“较真”也就是C++了。因为性能的缘故,一个内存不合理的分配,都可能在日后成为一个隐患,成为一个令人头疼的BUG。所...https://blog.csdn.net/skrskr66/article/details/92769994

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值