是否值得用C语言编写部分代码而不是C++作为微优化?

Ben*_*ery 7 c c++ performance micro-optimization

我想知道现代编译器和它们的优化是否仍然值得用C而不是C++编写一些关键代码以使其更快.

我知道C++可能会导致在复制的情况下性能不佳,而它们可以通过引用传递,或者当编译器自动创建类时,通常使用重载的运算符和许多其他类似的情况; 但是对于一个知道如何避免所有这些的优秀C++开发人员来说,仍然值得用C语言编写代码以提高性能吗?

edA*_*a-y 18

我将同意很多评论.在C++中有意支持C语法(仅在C99中有分歧).因此,所有C++编译器都必须支持它.事实上,我认为很难找到任何专用的C编译器.例如,在GCC中,无论代码是C还是C++,您实际上最终都会使用相同的优化/编译引擎.

那么真正的问题是,编写纯C代码和在C++中编译是否会受到性能损失.答案是,出于所有意图和目的,没有.关于异常和RTTI有一些棘手的问题,但这些主要是尺寸变化,而不是速度变化.你很难找到一个实际上会受到性能影响的例子,因此写一个专用模块似乎并不值得.

关于你使用什么功能的说法非常重要.在C++中很容易弄清楚复制语义,并且会因复制内存而承受巨大的开销.根据我的经验,这是最大的成本 - 在C中你也可以承受这笔费用,但并不像我说的那么容易.

虚函数调用比普通函数稍贵一些.同时强制内联函数比正常函数调用便宜.在这两种情况下,从堆栈推送/弹出参数的成本可能更昂贵.担心函数调用开销虽然在优化过程中应该很晚 - 因为它很少是一个重大问题.

投掷时的例外成本很高(至少在海湾合作委员会中).但是设置catch语句和使用RAII并没有与之相关的显着成本.这是在GCC编译器(和其他人)中设计的,因此真正只有特殊情况才是昂贵的.

但总结一下:一个优秀的C++程序员无法简单地通过在C中编写代码来使代码运行得更快.


pmg*_*pmg 10

测量! 测量想着优化,之前的措施将优化前,测量应用优化后,测!

如果你必须更快地运行你的代码1纳秒(因为它会被1000人,1000倍,在接下来的1000天内使用,并认为第二个是很重要的),任何事情都会发生.

是! 值得的 ...

  • 更改语言(C++到C; Python到COBOL; Mathlab到Fortran; PHP到Lisp)
  • 调整编译器(启用/禁用所有-f选项)
  • 使用不同的库(甚至自己编写)
  • 等等
  • 等等

你不能忘记的是衡量!.

  • 在测量之间,*capture*(http://stackoverflow.com/questions/406760/whats-your-most-controversial-programming-opinion/1562802#1562802)测量仅告诉您所做的是否有所作为.它没有告诉你要修复什么.并且,它鼓励您假设小数位精确意味着任何东西. (2认同)