我读到,使用 C++ 异常进行异常处理(而不是检查返回值)会产生一些开销。我只是谈论没有抛出异常时产生的开销。我还假设您需要实现实际检查返回值并执行适当操作的代码,无论什么都相当于 catch 块将执行的操作。而且,将抛出内部有 45 个状态变量的异常对象的代码与为每个错误返回负整数的代码进行比较也是不公平的。
我并不是试图仅仅根据哪个可能执行得更快来建立支持或反对 C++ 异常的案例。我听说最近有人提出这样的情况:一旦考虑到检查返回值和处理错误所需的所有额外簿记代码,使用异常的代码应该与基于返回代码的代码运行得一样快。我缺少什么?
与异常处理相关的成本some平台和some编译器。
也就是说,Visual Studio 在构建 32 位目标时,将在每个具有非平凡析构函数的局部变量的函数中注册一个处理程序。基本上,它设置了一个try/finally
处理程序。
另一种技术采用的是gcc
和针对 64 位的 Visual Studio,仅在出现异常时才会产生开销thrown(该技术涉及遍历调用堆栈和表查找)。在很少抛出异常的情况下,这实际上可以产生更高效的代码,因为不需要处理错误代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)