考虑以下程序:
#include <stdio.h>
int main(void)
{
printf("hello world\n");
return 0;
}
如果我使用 GCC 构建它,优化大小并使用静态链接,然后剥离它以进一步减小大小(可能):
$ gcc -Os -static hello.c -o hello
$ strip hello
我得到一个大小约为 695 KB 的可执行文件。
为什么这么大?我意识到这不只是我的目标代码,还有 stub 和其他东西,但仍然有点庞大。
注意事项:
- 操作系统:Devuan GNU/Linux Chimaera(~= Debian Bullseye)
- 编译器:GCC 10.2
- libc: glibc 2.31-13
- 处理器架构:x86_64
- 如果我使用
-O3 -flto
构建它并没有改善。
最佳答案
部分答案:可执行文件的膨胀大小......
- 不与您对
printf
的使用有任何关系吗? . - 与编译器优化代码的能力不有什么关系。
- 不与您包含
<stdio.h>
有任何关系吗? .
为什么?因为即使你编译一个空程序:
int main(void)
{
return 0;
}
您仍然获得相同的 695 KB 可执行文件。
感谢@SparKot 指出这个方向的评论。
关于c - 为什么静态链接的 "hello world"程序这么大(超过 650 KB)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71755641/