【发布时间】:2018-07-08 16:04:01
【问题描述】:
例如:我创建了一个打印“Hello, World”的简单 C 程序,编译它并创建了一个大小为 39.8Kb 的可执行文件。
按照this 的问题,我能够创建等效但用Assembly 编写的程序的大小为39.6Kb。
这让我大吃一惊,因为我预计汇编程序会比 C 程序小。正如问题所示,它使用 C 头文件和 gcc 编译器。这会使汇编程序更大还是它们的大小大致相同是否正常?
使用strip 命令我减少了这两个文件。这删除了调试代码,现在两者的文件大小非常相似。均为 18.5Kb。
test.c:
【问题讨论】:
-
您为什么希望它们有很大不同?他们在做同样的事情。
-
@Barmar 我被引导相信人们(有时)使用汇编器,因为它级别更低、速度更快并且输出更小,但如果我错了,请告诉我。
-
编译器非常擅长生成最优代码。
-
对于一个非常小的程序,大小主要由开销和任何链接库决定。如果您使用 C 编译器来编译汇编器,那么它们可能是相同的。
-
您在汇编中只重写了该应用程序的一小部分(仅调用
printf和exit)并将 95% 的代码的实现留给 C 运行时库(您可能非常低估了“下”完成的工作量)。这对于您的 asm 版本和 C 版本都是相同的,所以难怪您以大致相同的可执行文件结束。最小的 windows PE 可执行文件据说是 133 字节,我没有检查它在 DOS 标头区域中是否还有足够的空间用于快速和肮脏的 hello world 输出,可能没有,但假设 200B 可能就足够了。剩余的 39kB 是便利性和 C 运行时。
标签: c windows assembly executable filesize