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个数量级!

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

  • 相关阅读:
    进化中的技术小白
    mybatis的学习5______使用注解实现CURD
    mybatis的学习4______分页的实现
    Mybatis的学习3______使用log4j打印日志信息
    mybatis的学习2_____配置文件的详解和代码的优化
    Java代码实现邮件的上传
    JavaWeb小作业 用户表单数据的获取
    Java的学习JSP____4
    Javaweb的学习session___3
    Javaweb的学习(servlet和request)___2
  • 原文地址:https://www.cnblogs.com/reasno/p/4827710.html
Copyright © 2011-2022 走看看