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. 命令行参数和环境变量
- 使程序了解进程环境,在执行时分配内存
- 在 shell 中执行某个程序(shell 的子进程)时,shell 进程调用 exec 函数将命令行参数传递给要执行的程序