Memory management 合并数据段和bss段

Memory management 合并数据段和bss段,memory-management,operating-system,Memory Management,Operating System,为什么程序会为程序变量创建两个段,我指的是数据段和BSS段。在另一个世界中,由于它们都是用来表示程序变量的,而且都是读/写段,为什么它们不只是组合在一个段中?在段中的数据。数据段在创建可执行文件时(即在构建时)具有不同的值,其中包括编译和链接时间。 它直接存储在可执行文件中,因此会消耗其中的空间和加载到内存中的核心映像 Otoh, >中的数据。BSS 段默认值为0(即使我认为一些预DOS OSE留下值未初始化,但无论如何C和C++标准都强制执行零)。与.data中的数据不同,.data中的数据

为什么程序会为程序变量创建两个段,我指的是数据段和BSS段。在另一个世界中,由于它们都是用来表示程序变量的,而且都是读/写段,为什么它们不只是组合在一个段中?

段中的数据。数据
段在创建可执行文件时(即在构建时)具有不同的值,其中包括编译和链接时间。
它直接存储在可执行文件中,因此会消耗其中的空间和加载到内存中的核心映像

Otoh, >中的数据。BSS 段默认值为0(即使我认为一些预DOS OSE留下值未初始化,但无论如何C和C++标准都强制执行零)。与
.data
中的数据不同,
.data
中的数据可能有多种值,每个数据对应一个值,
.bss
中的数据无需使用任意值显式初始化。总之,
.bss
中的变量不会占用可执行文件或核心映像中的空间。它们是由操作系统在运行时创建的

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