c++ - 是否有关于使用 C++ 编译器进行 C 编译的结论性研究/实验?

标签 c++ c performance compiler-construction embedded

我见过很多关于用 C++ 编译器编译的 C 代码的一般性能的争论——我很好奇是否有任何可靠的实验研究隐藏在所有轶事之下您在网络搜索中找到的火焰 war 。我对 GCC 套件特别感兴趣,但任何数据点都会很有趣。 (比较“Hello, World!”的程序集并不像我想要的那样健壮。:-)

我通常假设您使用“嵌入式样式”标志——没有异常(exception)或 RTTI。我也不介意知道是否有关于编译时间本身的研究。 TIA!

最佳答案

添加一个数据点(或者至少是一个轶事):

我们最近正在为一个类似嵌入式的小型目标编写一个数学库,并开始用 C 编写它。大约在项目进行到一半时,我们将一些文件切换为 C++,主要是为了使用模板来处理一些函数,否则我们将编写许多几乎相同的代码片段(或者在预处理器宏中嵌入 40 行函数)。

在我们开始切换时,我们非常仔细地查看了一些函数生成的汇编代码(使用 GCC),并确认文件是否编译为 C 实际上基本相同或 C++——我所说的“基本相同”是指不同之处在于符号名称以及汇编文件开头和结尾的内容;函数中间的实际指令完全相同。

抱歉,我没有更可靠的答案。

编辑添加,2013-03-24:最近我看到一篇文章,其中 Rusty Russell 比较了使用 C 编译器编译和使用 C++ 编译器编译的 GCC 的性能,以回应最近的切换到将 GCC 编译为 C++:http://rusty.ozlabs.org/?p=330 .结论很有趣:用 C++ 编译器编译的版本稍微慢一点;差异约为0.3%。然而,这完全可以用更大的调试信息导致的加载时间差异来解释;当他剥离二进制文件并删除调试信息时,差异小于 0.1%——也就是说,基本上与测量噪声无法区分。

关于c++ - 是否有关于使用 C++ 编译器进行 C 编译的结论性研究/实验?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1276284/

相关文章:

c++ - 为同一对象管理多个流运算符(operator<<, >>)

iPad 上的 C++ 编程

c++ - 是否有一个自动源代码格式化程序可以很好地包装 C/C++ 行?

c - 这在 C 中意味着什么((TYPE){})。该片段取自 : __typeof__ ( ((TYPE){}). MEMBER )

c - 为指向指针数组的指针赋值

c - 如果 num 在 C 中小数点后没有数字,则浮点为 int

Java拆分字符串表现

转换为较小类型时 C++ 截断

javascript - 如何观察 DOM 元素位置变化

c++ - 避免在 map/unordered_map 中进行多次查找