【发布时间】:2016-02-12 11:23:00
【问题描述】:
在《更有效的 C++》(第 15 期)一书中,我读到如果启用异常,即使不使用它们,代码也会显着变慢。在我看来,异常的用处有限,我尽量避免它们,但这是另一个话题。
我不完全理解他的说法:
- 启用/禁用异常是什么意思?它是具有零个或多于零个 try/catch 块之间的区别吗?它是编译器标志吗?如果我使用可能发生异常的 DLL,会发生什么情况?
- 假设没有抛出异常:
- 是整个代码变慢了还是只是程序进入/退出 try/catch 块的部分变慢了?根据作者的说法,两者都是正确的。
- 如何编译不出现异常?即使我有 try/catch 块,我也可以这样做吗?如果我使用的 DLL 可能引发异常,我可以这样做吗?
【问题讨论】:
-
这本书很老了,从那时起编译器就变得更聪明了。今天一个体面的可以零开销地做到这一点,使用基于表的查找指令地址来查找需要在堆栈展开时运行的代码。但是,如果您无论如何都想为此烦恼,请查看编译器选项,大多数都可以选择禁用该功能。
-
" 在我看来,异常的用处有限,我尽量避免它们,但这是另一个话题。"我的猜测是你的代码没有调用任何错误的系统调用。你在给 CPU 加热器编程吗?
-
@user4590120:异常不是处理失败的唯一方法。我使用返回码来检查成功或失败。
标签: c++ performance exception-handling