首页 > 解决方案 > 为什么简单的程序会占用这么多存储空间?

问题描述

我在 C 中创建了一个简单的 hello world 程序,如下所示:

#include <stdio.h>

int main() {
    printf("Hello World!\n");
    return 0;
}

之后,我在 Mac 上使用 gcc 编译它并使用 xxd 转储它。每行 16 个字节(8 个字),编译后的程序总共有 3073 行或 49424 个字节。在所有这些字节中,只有 1 904 个字节组成了程序,而其余 47 520 个字节全为零。考虑到只有大约 3.9% 的字节不是零,这是一个明显的空间浪费示例。有没有办法在这里优化可执行文件的大小?(顺便说一句,我已经尝试使用-Os编译器选项但没有得到任何结果。)

编辑:我通过计算 hexdump 的行数得到了这些数字,但在包含实际指令的行中也有零。我没有计算这些字节,因为它们可能对程序的执行至关重要。(就像字符串的空终止符Hello World!)我只计算了完整的零块。

标签: ccompiler-construction

解决方案


生成的文件不仅包含程序所需的代码和数据。它还包含正确加载和执行程序所需的元数据。一般来说,这个元数据可能会被分成多个部分,每个部分都需要在某个边界对齐。为了做到这一点,可以添加一些零来填充。对更大的程序进行相同的检查将减少元数据和填充占用的空间。


推荐阅读