【问题标题】:Combine data segment and bss segment合并数据段和bss段
【发布时间】:2025-12-06 04:00:01
【问题描述】:

为什么进程会为程序变量创建两个段,我的意思是数据段和 BSS 段。在其他世界中,既然它们都旨在表示程序的变量,而且都是读/写段,为什么它们不只是组合在一个段中?

【问题讨论】:

    标签: memory-management operating-system


    【解决方案1】:

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

    OTOH,默认情况下,.bss 段中的数据的值为零(尽管我认为某些 pre-DOS 操作系统未初始化该值,但无论如何 C 和 C++ 标准都强制执行零)。 .data 中的数据可能有多种值,每个数据一个值,与 .bss 中的数据相反,.bss 中的数据不需要用任意值显式初始化。总之,来自 .bss 的变量不会占用可执行文件或核心映像中的空间。它们是由操作系统在运行时创建的。

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

    【讨论】:

      最近更新 更多