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天内使用,并认为第二个是很重要的),任何事情都会发生.
是! 值得的 ...
-f
选项)你不能忘记的是衡量!.