Loading

MoreEffect[15] 了解异常处理的系统开销

支持异常处理本身伴随资源的开销,即使不使用异常特性,这部分开销仍是不可避免的,但了解其有助于将开销最小化。异常处理的开销包括:

  1. 建立数据结构跟踪对象是否被完全构造、在抛出异常时应释放哪个对象,并不断更新这些数据。

    这部分的开销比较小,但是不可避免。因为异常是C++的一部分,除非编译器能够自由开关是否支持异常,但仍要确保程序和其链接的程序库都不使用异常特性。

  2. 记录try块的入口,每个相关的catch子句的位置和其捕获的异常类型。

    不同编译器实现try的方法不同,但都需要额外为异常规格生成代码,粗略估计会增加5%-10%的代码尺寸。因此,应避免使用无用的try块,同时应考虑使用在异常处理方面效率更高的编译器。

  3. 抛出异常的流程。

    与正常函数返回相比,通过异常从函数中返回会慢三个数量级,可见异常抛出开销明显。但异常本身总是罕见的,开销只在发生时存在,因而在实际中不必太关心抛出的开销。

posted @ 2021-09-30 21:48  sandersunkown  阅读(73)  评论(0)    收藏  举报