对于一个进程,其空间分布如下图所示:
可执行程序包括BSS段、 数据段 、 代码段 (也称文本段)。
BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的 全局变量 和 静态变量 的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。
注意和 数据段 的区别,BSS存放的是未初始化的 全局变量 和 静态变量 ,数据段存放的是初始化后的全局变量和静态变量。
可执行文件: 包含了代码和数据。具有可执行的程序。
可重定位文件:包含了代码和数据(这些数据是和其他重定位文件和共享的 文件一起连接时使用的)
共享 object 文件(又可叫做共享库):包含了代码和数据(这些数据是在连接 时候被连接器 ld 和运行时动态连接器使用的)。
使创建共享库容易,使动态装载和共享库的结合更加容易。在 ELF 下,在 C++
中,全局的构造函数和析构函数在共享库和静态库中用同样方法处理。