bal*_*raj 1 c memory-management
我有这个简单的代码.
#include<stdio.h>
int main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在可执行文件上运行size命令显示以下输出
text data bss dec hex filename
1053 276 4 1333 535 a.out
Run Code Online (Sandbox Code Playgroud)
我的问题是,即使我没有任何未初始化的全局变量或静态变量,为什么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
Run Code Online (Sandbox Code Playgroud)
当然,那么你需要对你的程序进行其他(重要的!)更改:
$ cat x.c
void _start() {
__asm("mov $1, %eax; mov %eax,%ebx; int $0x80");
}
Run Code Online (Sandbox Code Playgroud)
参考文献: