C++ C++;异常代码对性能的影响?

C++ C++;异常代码对性能的影响?,c++,exception,exception-handling,C++,Exception,Exception Handling,如果我们删除所有带有错误返回值的try-catch异常处理代码,那么代码执行过程中会有恒定的性能提高还是%的性能提高 是否有好的文章/参考文献可以解释第一次抛出、尝试捕获和后续抛出、尝试捕获块的成本 这个问题的目的并不是寻找一个阈值,在这个阈值上,我们可以使用错误返回方式对异常进行编码。我们都知道这很混乱。(更快但更混乱) 我希望量化试捕成本以及0到1试捕区块和1到n试捕区块的影响 性能影响取决于异常抛出和捕获的实现 例如,对SSH异常使用\uuuu try\uuuu except比“常规”t

如果我们删除所有带有错误返回值的try-catch异常处理代码,那么代码执行过程中会有恒定的性能提高还是%的性能提高

是否有好的文章/参考文献可以解释第一次抛出、尝试捕获和后续抛出、尝试捕获块的成本

  • 这个问题的目的并不是寻找一个阈值,在这个阈值上,我们可以使用错误返回方式对异常进行编码。我们都知道这很混乱。(更快但更混乱)

  • 我希望量化试捕成本以及0到1试捕区块和1到n试捕区块的影响


性能影响取决于异常抛出和捕获的实现

例如,对SSH异常使用
\uuuu try
\uuuu except
比“常规”try-catch块具有不同的开销

如果你想亲自查看,只需在你的系统上对其进行基准测试

异常中真正的“邪恶”是它们破坏了程序的“正常”流


这通常会导致程序进入未定义状态(取决于程序员处理的好坏)。

这完全取决于编译器和ABI——没有一个答案

即使你不扔,它们也有可能产生一点成本。例如,setjmp/longjmp实现是由VC++使用的。一般来说,这是一个微不足道的成本,但它仍然存在

也可以有零成本的例外——也就是说,在抛出之前它们是免费的。对于正确使用异常的代码来说,这通常是更好的(使异常保持罕见和…异常)


异常可能比明显的C风格错误处理更便宜。智能编译器可以识别出
catch
块将是罕见的,并将它们降级到单独的缓存线或页面中,确保“热”非异常代码尽可能地保持在一起。

“如果我们删除所有带有错误返回值的try-catch异常处理代码,”-那么您将获得一张免费的代码地狱入场券!不要担心过早的微观优化。如果您没有对程序控制流使用try/catch,则不会有问题。另外,基准优先。关于性能,没有任何假设。只有通过分析获得的事实和数字。@OP将其视为的副本是否公平?还有一个相关的问题:这并不是全部。至少几年前,仅仅在VC++中启用C++异常会导致代码膨胀和轻微的性能命中率的百分之几。这主要是由于编译器在抛出异常时必须跟踪需要销毁的本地对象,因为堆栈已展开。