zoukankan      html  css  js  c++  java
  • More Effective C++ 条款15 了解异常处理(exception handling)的成本

    1. 为了支持运行期处理exception,编译器需要做大量的簿记工作:确认如果发生异常所需要析构的对象,记录每个try语句块对应的catch子句及其能够处理的exception类型等.编译器还需要在运行期做一些对比工作:在exception抛出时适当析构对象并找出正确的catch子句等.可见exception的使用需要大量成本.

        "即使从未使用任何exception处理机制",也必须付出一些成本:编译器需要一些额外空间放置某些数据结构(以记录哪些对象已被完全构造妥当);编译器需要一些额外时间以实时保证那些数据结构的正确性等.

    2. 由1可知,如果编译过程加上对exception的支持,即使不适用exception处理机制,程序也会比较大,执行也比较慢.因此某些编译器厂商允许用户自行决定是否使用异常处理机制(vs2013可以通过:工程属性→配置属性→C/C++→所有选项→启用C++异常来设置),前提是程序及其所链接的程序库没有一个用到try,throw或catch.对于避免exceptions的程序库而言,这有利于编译器完成性能优化,然而也必须保证"client端抛出的exceptions绝不会传入程序库",这不仅会对"client重新定义程序库内的虚函数"带来妨碍,也会对"client定制callback函数"带来排挤影响.

    3. 不同编译器以不同的方法实现try语句块,使用try语句块的代码整体膨胀大约5%~10%,执行速度也会下降这个数;

        对于exception specifications,编译器也会有类似行为,因此exceptions specifications通常会招致与try语句块相同的成本;

        和正常的函数返回动作相比较,抛出一个exception所导致的函数返回可能要慢3个数量级!

        (以上数据根据作者的"小道消息和一些测试结果")

  • 相关阅读:
    linux 软件各文件安装位置
    c dup 函数
    c sigaction信号处理
    vtun 信号处理
    vtun 虚拟网卡的读写非阻塞研究
    vtun 守护进程详解
    vtun fork函数
    vtun 中的__io_canceled变量和相关函数
    android 之 AIDL
    android 显示电池电量
  • 原文地址:https://www.cnblogs.com/reasno/p/4827710.html
Copyright © 2011-2022 走看看