C++ 内存管理:栈、堆、BSS、data、text
C++是一门追求极致性能的语言,合理的内存管理能够缔造出极致性能的代码,否则,不合理的内存管理,会成为日常隐患,产生一系列的BUG。
Linux下操作系统程序地址空间的内存管理分布图如下所示:
C++程序在执行时,内存区域主要可以分为四个部分:栈、堆、全局区(静态数据区)、代码段。
栈区:
由编译器自动开辟与释放,存放函数的参数值、局部变量等,栈区是由高地址位向低地址位增长,是一块连续的内存区域,一般最大尺寸为2M。
堆区:
由程序员使用malloc/free进行申请和释放,堆区是由低地址位向高地址位增长,采用链式存储结构,频繁的使用malloc/free容易造成内存空间不连续,产生内存碎片。用户对堆区申请空间时按照一定的算法搜索周围足够大的空间,因此开辟空间效率远低于栈区。
BSS段:
未初始化或初始化为0的全局变量和静态变量。此块内存属于静态分配,程序结束后静态变量资源由系统自动释放。(内核在程序开始前将BSS区域数据全部置0)
数据段:
存放已初始化的全局变量和静态变量,此块内存属于静态分配,程序结束后静态变量资源由系统自动释放。此外,字符串常量可看作是一个没有命名的字符串且为常量,也存放在静态数据区。
代码段:
存放程序执行代码的一块内存区域。区域大小在程序运行前已经被确定,且内存区域只读。代码段中可能包含一些只读常数变量。
参考博客:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具