MoreEffect[15] 了解异常处理的系统开销
支持异常处理本身伴随资源的开销,即使不使用异常特性,这部分开销仍是不可避免的,但了解其有助于将开销最小化。异常处理的开销包括:
-
建立数据结构跟踪对象是否被完全构造、在抛出异常时应释放哪个对象,并不断更新这些数据。
这部分的开销比较小,但是不可避免。因为异常是C++的一部分,除非编译器能够自由开关是否支持异常,但仍要确保程序和其链接的程序库都不使用异常特性。
-
记录
try块的入口,每个相关的catch子句的位置和其捕获的异常类型。不同编译器实现
try的方法不同,但都需要额外为异常规格生成代码,粗略估计会增加5%-10%的代码尺寸。因此,应避免使用无用的try块,同时应考虑使用在异常处理方面效率更高的编译器。 -
抛出异常的流程。
与正常函数返回相比,通过异常从函数中返回会慢三个数量级,可见异常抛出开销明显。但异常本身总是罕见的,开销只在发生时存在,因而在实际中不必太关心抛出的开销。

浙公网安备 33010602011771号