如果我们删除带有错误返回值的try-catch的所有异常处理代码,代码执行中是否会有持续的性能提升或性能提升%?
是否有好的文章/参考资料可以解释第一次投掷,尝试捕获和后续投掷成本,试用捕获块的成本?
这个问题的目的不是要找到一个阈值,在这个阈值下,可能会出现异常编码的错误返回方式。我们都知道它很乱。 (更快但很乱)。
我希望量化尝试捕获的成本及其对w.r.t的影响。 0到1个try-catch块,1到n尝试catch块。
答案 0 :(得分:1)
这完全取决于编译器和ABI - 没有人回答。
即使你不扔,也有可能产生一小笔费用。例如,VC ++使用setjmp / longjmp实现。一般来说,这是一个不知不觉的微不足道的代价,但它仍然存在。
也可以有零成本例外 - 也就是说,在你抛出之前它们是免费的。对于正确使用异常的代码来说,这通常更好(使它们保持罕见且非常特殊)。
异常有可能比你明显的C风格错误处理更便宜。智能编译器可以识别catch
块很少见,并将它们放入单独的缓存行或页面中,确保“热”非特殊代码尽可能保持紧密。
答案 1 :(得分:0)
性能影响取决于异常抛出和捕获的实现。
例如,对于SSH异常使用__try
__except
具有与“常规”try catch块不同的开销。
如果您想亲眼看看,请自行在您的系统上进行基准测试。
例外中真正的“邪恶”是他们打破了程序的“正常”流程。
这通常会导致程序进入未定义状态(取决于程序员处理它的程度)。