为什么为"Hello World"程序生成的代码对C++比为 C 生成的代码大 10 倍?
Why is the code generated for "Hello World" program 10 times larger for C++ than for C?
这是我最近在Bjarne Stroustrup博士的网站上读到的常见问题解答。我还用C和C++测试了一个简单的"Hello World"程序,令人惊讶的是,C++"Hello World"程序可执行文件的大小为1357 KB(1.32 MB),而C中可执行文件只有122 KB。为什么C"Hello World"程序和C++"Hello世界"程序在大小上有如此巨大的差异?
http://stroustrup.com/bs_faq.html#Hello-世界
我使用的是Orwell Dev-C++编译器。我使用了选项"剥离可执行文件"&重新编译。完成此操作后,大小在C中减少到12KB,在C++中减少到536KB。
以下是使用gcc编译的c和c++hello-world程序的二进制文件大小的比较:http://coliru.stacked-crooked.com/a/46126d97d45fba1a
该平台上的c和c++之间的大小差异是240字节,无论是剥离的还是非剥离的可执行文件,这在我看来都是微不足道的。
正如Stroustrup在您链接的页面上所写:
这都是一个实现者如何组织标准库的问题(例如静态链接与动态链接、默认的区域设置支持与通过和选项启用的区域设置支撑等)。如果一个版本比另一个版本大得多,请向更大版本的实现者报告问题。
Stroustrup没有指定多少应该被视为"重要",但如果你的编译器为一个相同的helloworld程序生成了10倍大的二进制文件,那么错误报告可能是合适的。
这取决于您的编译器以及您使用的环境。如果你静态链接,那么你将在你的可执行文件中包括标准库,而通常这是动态的,因为标准库在不同的平台上可能会有所不同(尽管我想你无论如何都会单独编译)。此外,正如您在这里看到的,它确实会使可执行文件的文件大小膨胀。
尝试动态链接到标准库,您可能需要将库二进制文件复制到与可执行文件相同的目录中。在此之后,文件大小可能会非常相似。
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 运行Qt时处理退出代码0xC0000135 hello world
- 如何使用python运行Hello world c ++代码
- 我正在尝试在Visual Studio 2013中编写我的第一个"Hello World"代码。为什么我会收到"IntelliSense: no operator message"和"error C2
- 代码::块 - Linux - 打印"Hello World",即使它不在"main.cpp"文件中
- 我正在尝试将 s1 中的所有字符更改为"x"。但是,当我运行代码时,编译器刚刚打印出"hello world"11次
- 从代码块开始,构建Hello世界是行不通的(权限被拒绝)
- 为什么为"Hello World"程序生成的代码对C++比为 C 生成的代码大 10 倍?
- Visual Studio 2010 在尝试运行简单的"Hello World"代码时崩溃?
- 运行时生成机器指令的Hello世界代码
- 命令提示符上不会出现简单的"Hello World"代码