-1

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

是否有好的文章/参考资料可以解释第一次投掷的成本,try-catch 和后续投掷的成本,try-catch 块?

  • 这个问题的目的不是要找到一个阈值,在这个阈值上人们可能会针对异常进行错误返回编码风格。我们都知道这很混乱。(更快但混乱)。

  • 我希望量化 try-catch 的成本及其对 0 到 1 的 try-catch 块和 1 到 n 的 try-catch 块的影响。

4

2 回答 2

1

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

即使您不投掷,他们也可能会产生少量成本。例如,setjmp/longjmp 实现由 VC++ 使用。通常这是一个难以察觉的微不足道的成本,但它仍然存在。

零成本异常也是可能的——也就是说,它们在你抛出之前是免费的。这对于正确使用异常的代码通常更好(保持它们很少见并且......异常)。

异常有可能比你明显的 C 风格错误处理更便宜。一个聪明的编译器可以识别catch块将是稀有的,并将它们降级到单独的缓存行或页面中,确保“热”的非异常代码尽可能靠近。

于 2013-02-24T08:00:24.567 回答
0

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

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

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

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

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

于 2013-02-24T07:56:08.490 回答