【C】C程序内存分配
文章目录
- 1. C程序内存布局
1. C程序内存布局
从低地址到高地址依次为:
- 代码段
- 存储内容:存放编译后的机器指令
- 特点:代码段是只读的;可共享,多个进程可共享同一份代码
- 数据段
- 存储内容
- 已初始化的全局变量
- 已初始化的静态变量,包括static修饰的局部变量和全局变量
- 特点:程序启动时加载,生命周期和程序一致;显式初始化
- 存储内容
- BSS段
- 存储内容:
- 未初始化的全局变量
- 未初始化的静态变量
- 特点:程序启动时由系统初始化为0/NULL;不占用可执行文件的实际空间(仅记录大小)
- 存储内容:
- 堆区
- 存储内容:动态分配的内容(如malloc、calloc、realloc申请的内存)
- 特点:
- 需要手动管理,如需要显式调用free进行释放
- 空间大但是分配速度慢
- 内存碎片为题常见
- 向高地址增长
- 栈区
- 存储内容
- 局部变量
- 函数参数
- 函数调用的上下文,如返回地址、寄存器状态等
- 特点
- 自动管理:进入作用域分配,退出作用域时释放
- 空间有限,分配速度快
- 向低地址增长
- 存储内容
- 内存映射段
- 存储内容
- 动态链接库
- 文件映射,如mmap系统调用
- 匿名映射,用于大块内存分配
- 存储内容