结合数据段和bss段

时间:2016-01-27 14:11:00

标签: memory-management operating-system

为什么该过程为程序变量创建两个段,我的意思是数据段和BSS段。在另一个世界中,既然它们都是为了代表程序的变量而且都是读/写段,为什么它们不仅仅组合在一个段中呢?

1 个答案:

答案 0 :(得分:0)

.data段中的数据在创建可执行文件时确定了不同的值,即在构建时,包括编译和链接时间。
它直接存储在可执行文件中,因此会占用空间并将核心图像加载到内存中

OTOH,.bss段中的数据默认值为零(尽管我认为一些DOS前操作系统保留了未初始化的值,但无论如何都是由C和C ++标准强制执行的)。与.data中可能具有各种值的数据相对应,每个数据一个,.bss中的数据不需要使用任意值显式初始化。总之,来自 .bss 变量不会消耗可执行文件或核心图像中的空间。它们是由OS在运行时创建的。

这些属性使两个段合并不可行。以增加核心图像为代价,可以消除.bss部分,但这会破坏它的目的。