我有这个简单的代码。
#include<stdio.h>
int main()
{
return 0;
}
在可执行文件上运行 size 命令显示以下输出
text data bss dec hex filename
1053 276 4 1333 535 a.out
我的问题是,即使我没有任何未初始化的全局或静态变量,为什么 bss 有 4 个字节?
我有这个简单的代码。
#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");
}
参考: