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

时间:2013-02-24 07:46:38

标签: c++ exception exception-handling

如果我们删除带有错误返回值的try-catch的所有异常处理代码,代码执行中是否会有持续的性能提升或性能提升%?

是否有好的文章/参考资料可以解释第一次投掷,尝试捕获和后续投掷成本,试用捕获块的成本?

  • 这个问题的目的不是要找到一个阈值,在这个阈值下,可能会出现异常编码的错误返回方式。我们都知道它很乱。 (更快但很乱)。

  • 我希望量化尝试捕获的成本及其对w.r.t的影响。 0到1个try-catch块,1到n尝试catch块。

2 个答案:

答案 0 :(得分:1)

这完全取决于编译器和ABI - 没有人回答。

即使你不扔,也有可能产生一小笔费用。例如,VC ++使用setjmp / longjmp实现。一般来说,这是一个不知不觉的微不足道的代价,但它仍然存在。

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

异常有可能比你明显的C风格错误处理更便宜。智能编译器可以识别catch块很少见,并将它们放入单独的缓存行或页面中,确保“热”非特殊代码尽可能保持紧密。

答案 1 :(得分:0)

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

例如,对于SSH异常使用__try __except具有与“常规”try catch块不同的开销。

如果您想亲眼看看,请自行在您的系统上进行基准测试。

例外中真正的“邪恶”是他们打破了程序的“正常”流程。

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