当异常没有被抛出时,C异常以什么方式减慢代码?

我已经读到,有一些开销,使用C异常处理异常,而不是检查返回值。我只是说没有引发异常时产生的开销。我还假设你需要实现的代码,实际检查的返回值,并做适当的事情,无论是相当于catch块会做什么。并且,将具有45个状态变量的异常对象的代码与为每个错误返回一个负整数的代码进行比较也是不公平的。

我不是试图建立一个case或针对C异常只是基于哪一个可能执行更快。我听说有人最近做的情况下,使用异常的代码应该运行与基于返回代码的代码一样快,一旦你考虑到需要检查返回值和处理错误的所有额外的簿记代码。我缺少什么?

最佳答案
在某些平台上和某些编译器上有与异常处理相关的成本。

也就是说,Visual Studio在构建32位目标时,会在每个具有局部变量和非平凡析构函数的函数中注册一个处理程序。基本上,它设置一个try / finally处理程序。

gcc和Visual Studio针对64位使用的另一种技术仅在引发异常时引发开销(该技术涉及遍历调用堆栈和表查找)。在很少抛出异常的情况下,这实际上可以导致更有效的代码,因为不必处理错误代码。

转载注明原文:当异常没有被抛出时,C异常以什么方式减慢代码? - 代码日志