我有这个简单的代码。
#include<stdio.h>
int main()
{
return 0;
}
在可执行文件上运行 size 命令显示以下输出
text data bss dec hex filename
1053 276 4 1333 535 a.out
我的问题是,即使我没有任何未初始化的全局或静态变量,为什么 bss 有 4 个字节?
最佳答案
您将您的代码链接到标准 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");
}
引用资料:
关于c - 当代码中没有未初始化的全局或静态变量时,为什么 bss 段包含初始 4 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302802/