1

我有这个简单的代码。

#include<stdio.h>
    int main()
    {
      return 0;
    }

在可执行文件上运行 size 命令显示以下输出

   text    data     bss     dec     hex filename
   1053     276       4    1333     535 a.out

我的问题是,即使我没有任何未初始化的全局或静态变量,为什么 bss 有 4 个字节?

4

1 回答 1

8

您将代码链接到标准 C 库。main()具体来说,您链接到在开始之前和返回之后再次运行的代码main()

该代码具有数据和 bss 要求。

如果您想避免这些要求,可以尝试不使用标准库进行链接:

$ gcc  -nostartfiles -nostdlib -nodefaultlibs x.c
$ size a.out
  text     data     bss     dec     hex filename
   118        0       0     118      76 a.out

当然,然后您需要对您的程序进行其他(重大!)更改:

$ cat x.c 
void _start() {
  __asm("mov $1, %eax; mov %eax,%ebx; int $0x80");
}

参考:

于 2013-04-30T14:50:49.187 回答