【问题标题】:Linux assembly; bss section memory initialized to 0?Linux 汇编; bss段内存初始化为0?
【发布时间】:2010-11-28 17:11:33
【问题描述】:

在测试中,我运行程序的 bss 部分中的内存在我在那里写任何东西之前总是被初始化为零。这是巧合,还是系统在将它们交给我之前“清理”了这些内存页面?我在 Ubuntu 上使用 nasm 汇编器(如果这可能会有所不同的话)。

【问题讨论】:

    标签: linux assembly nasm


    【解决方案1】:

    你的应用程序的可执行文件(ELF)有一个 BSS 部分的大小信息,当它启动时,内核为 BSS 部分分配一块内存,并将其清理为 0。这是由 ABI(应用程序二进制接口)定义的,所以你不用担心在不同的机器上有不同的。

    【讨论】:

    【解决方案2】:

    是的,BSS 已初始化为零。

    【讨论】:

    • 你有任何规范的(在小写意义上)参考吗?
    • 好吧,man gcc 说初始化为零的变量放在 BSS 中,所以为了合法,BSS 必须初始化为零。
    • @T.J.Crowder,我使用@Huang F. Lei 的回答找到了这个参考。参考是 Linux 标准库,特别是在页面:refspecs.linux-foundation.org/LSB_4.0.0/LSB-Core-generic/…
    猜你喜欢
    • 2011-05-14
    • 2019-03-24
    • 1970-01-01
    • 2017-02-09
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多