进程环境
文章目录
本文总结UNIX环境中一个进程是如何启动和终止的,如何向进程传递参数表和环境变量。
还介绍了进程内部的存储空间布局方式。
1.1 main函数
1.2 进程退出的方式
1.3 C程序的内存空间布局
UNIX系统中C程序的内存布局如下图所示:

程序中各部分的内容说明如下:
- 正文段(Text Segment): 该部分包含了CPU执行的机器指令。通常这个段的内容是可共享、在内存中频繁被执行的单副本程序。通常正文段是只读的,以防止被修改。
- 已初始化数据段(Initialized Data Segment): 它包含了程序中已明确初始化的变量。例如,明确初始化的全局变量。
- 未初始化数据段(Uninitialized Data segment): 通常称为bss(block started by symbol)段。在程序开始执行前,内核将此段中的变量数据初始化为0或者空指针。例如,未初始化的全局变量。
- 栈(stack): 存放函数中的临时变量,函数的参数以及函数返回地址等。
- 堆(heap): 动态分配的内存存放在堆区。堆区在未初始化数据段的上方。
只有正文段和已初始化的数据段是存放在磁盘中。
通过size命令可以查看二进制各个区域占用的大小。例如查看bash二进制的各个区域大小:size /usr/bin/bash