C 程序的内存空间布局

本文详细介绍了C程序的内存空间布局,包括命令行参数和环境变量、栈、堆、bss段、data段和text段。栈存储自动变量和函数信息,堆用于动态分配,bss段存放未初始化的全局变量,data段则包含初始化的全局变量。文本段包含机器指令,常量可能存在于不同的内存区域。
摘要由CSDN通过智能技术生成

C 程序的内存空间布局

表格中, 从上到下为高地址到低地址方向

segment 含义
argument and environment 命令行参数和环境变量(环境表和环境字符串)
stack
heap
bss 未初始化数据段
data 初始化数据段
text 正文段

1. 自由存储区: C++中, 堆是由 new 和 delete 管理的, 自由存储区(free store)是由 malloc 和 free 管理的
2. 全局区: C++中, 使用全局区(静态区)存储全局变量和静态变量, 不再区分data和bss, 即初始化和未初始化的数据占用同一块内存
3. 常量区: 存储字符串常量, 正常手段不允许修改, 和上面表格中的地址不连续存放, 所以单独说?
4. 立即数: 对于整数类型, 如果初始化常量值出现在表达式语句中, 通常会成为立即数, 被包含在生成的代码中, 即数字常量占用代码段汇编指令的操作数部分?
5. 全局区的初始化常量值: 没有参与代码生成的常量,比如用于全局变量的初始化、数组声明、模板参数等等,哪里也不存,在编译期就处理了

1. 命令行参数和环境变量

  1. 使程序了解进程环境,在执行时分配内存
  2. 在 shell 中执行某个程序(shell 的子进程)时,shell 进程调用 exec 函数将命令行参数传递给要执行的程序

2. 栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值