为什么该过程为程序变量创建两个段,我的意思是数据段和BSS段。在另一个世界中,既然它们都是为了代表程序的变量而且都是读/写段,为什么它们不仅仅组合在一个段中呢?
答案 0 :(得分:0)
.data
段中的数据在创建可执行文件时确定了不同的值,即在构建时,包括编译和链接时间。
它直接存储在可执行文件中,因此会占用空间并将核心图像加载到内存中。
OTOH,.bss
段中的数据默认值为零(尽管我认为一些DOS前操作系统保留了未初始化的值,但无论如何都是由C和C ++标准强制执行的)。与.data
中可能具有各种值的数据相对应,每个数据一个,.bss
中的数据不需要使用任意值显式初始化。总之,来自 .bss
的变量不会消耗可执行文件或核心图像中的空间。它们是由OS在运行时创建的。
这些属性使两个段合并不可行。以增加核心图像为代价,可以消除.bss
部分,但这会破坏它的目的。