可能是重复问题:
为什么编译后的Java类文件比C编译的文件小?
只是出于好奇,我刚刚编译了C、C++和Java的“Hello Worlds”。
Java类文件非常精简,只有423B,这是因为运行时不包含在二进制文件中。
C和C++的文件却分别为8.5K和9.2K。
它们为什么相对如此大呢? 我一直以为stdio或iostream是动态链接的,并不会增加可执行文件的大小。
那么所有的千字节都来自哪里呢? 通过观察十六进制转储,我发现有很多填充,我猜是为了提高性能。为什么一个二进制格式要这样组织呢?
pmg的链接非常有用!
关于填充,我发现程序段对虚拟内存页面边界(4096字节)的对齐导致它至少为8192字节。
关于mach-o二进制格式(适用于OS X和iOS)
为了获得最佳性能,段应该对齐到虚拟内存页面边界——PowerPC和x86处理器为4096字节。要计算段的大小,请将每个部分的大小相加,然后将总和向上舍入到下一个虚拟内存页面边界(4096字节或4千字节)。使用此算法,段的最小大小为4千字节,之后以4千字节增量调整大小。
下次在提问之前我会先做研究的 ;)