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

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

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

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

栈区:

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

堆区:

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

BSS段:

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

数据段:

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

代码段:

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

参考博客:

posted @   hik_老鬼  阅读(278)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示