【M15】了解异常处理(exception handling)的成本
1、为了在运行期处理异常,程序必须做大量额外的工作。比如,即使抛出异常,也必须保证离开作用域的栈上对象执行析构方法。因此,必须记录try语句的进入点和离开点,记录catch语句能够处理的异常等。这就意味着,程序目标码变大,执行速度慢。
2、即使从未使用任何异常处理,还是必须要付出最低代价,付出一些空间,放置某些数据结构,付出一些时间,保持数据结构的正确性。
3、即使自己的程序没有使用throw,try,catch语句,使用的其他程序库可能有异常处理,因此也要付出代价。
4、对于try语句,没有异常抛出的情况下,代码膨胀5%-10%,速度也下降这个数。
5、如果抛出异常,影响很大,速度可能会比正常情况下慢3个数量级。但是,抛出异常是罕见的,因此可以接受。这也就意味着,在相对正常的情况下,不要抛出异常。
6、考虑到异常对效率的影响,因此,在非用不可的情况下,才使用try语句。在确实是个异常的情况下,才抛出异常。