这是我最近在Dr. Bjarne Stroustrup's web site上阅读的常见问题解答。我还在C中测试了一个简单的“Hello World”程序,然后在C ++中测试,并且令人惊讶的是,C ++“Hello World”程序可执行文件的大小为1357 KB(1.32 MB),而C中的可执行文件大小仅为122 KB。为什么C“Hello World”程序和C ++“Hello World”程序之间的大小存在巨大差异?
http://stroustrup.com/bs_faq.html#Hello-world
我使用的是Orwell Dev-C ++编译器。我使用了选项“Strip executable”&重新编译它。执行此操作后,C大小减少到12 KB,C ++减少到536 KB。
答案 0 :(得分:3)
以下是使用gcc编译时c和c ++ hello world程序的二进制文件大小的比较:http://coliru.stacked-crooked.com/a/46126d97d45fba1a
对于剥离和非剥离的可执行文件,该平台上的c和c ++之间的大小差异为240字节,这在我看来是非常微不足道的。
正如Stroustrup在您已链接的页面上写道:
关于实现者如何组织标准库(例如,静态链接与动态链接,默认情况下的语言环境支持与通过和选项启用的语言环境支持等)都是一个问题。如果一个版本明显大于另一个版本,请将问题报告给较大版本的实现者。
Stroustrup没有指定应该考虑多少"重要",但是如果你的编译器为同一个hello world程序生成10倍大的二进制文件,那么bug报告可能是合适的。
答案 1 :(得分:0)
这取决于您的编译器以及您使用的环境。如果您静态链接,那么您将在可执行文件中包含标准库,而通常这是动态完成的,因为标准库可能在不同平台上有所不同(尽管我认为您无论如何都要单独编译)。此外,正如您在此处所看到的,它确实会破坏您的可执行文件的大小。
尝试动态链接到标准库,您可能必须将库二进制文件复制到与可执行文件相同的目录中。在此之后,文件大小可能非常相似。