【问题标题】:Why bss has some value in this case? [duplicate]为什么 bss 在这种情况下有一些价值? [复制]
【发布时间】:2017-11-23 21:01:11
【问题描述】:

我在某个网站上看到了这个,结果让我很惊讶:

#include <stdio.h>

int main(void)
{
    return 0;
}

当上面的代码使用size检查每个部分的内存时

$ gcc memory-layout.c -o memory-layout
$ size memory-layout
text       data        bss        dec        hex    filename
960        248          8       1216        4c0    memory-layout

这里, 没有任何全局或静态变量,bss 的大小显示为8。没搞懂这8个字节是干什么用的?

【问题讨论】:

    标签: c


    【解决方案1】:

    您正在查看完整可执行程序的段大小:源代码的目标模块链接到标准库启动代码和必要的库支持函数,例如exit。您看到的databss 的数字可能是由于这些模块定义的全局对象。请特别注意,您的 main 函数很难证明 960 字节的代码是合理的。

    只生成一个目标文件并在上面运行size

    $ gcc -c memory-layout.c
    $ size memory-layout.o
    

    【讨论】:

      猜你喜欢
      • 2017-03-05
      • 2016-06-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 2017-11-21
      相关资源
      最近更新 更多