第三章(11)C++异常处理的运行时问题
2022-09-01 本文已影响0人
耕田者
RTTI
目前的动态异常处理需要RTTI来匹配对应的异常处理分支,但RTTI又是一个违反零开销原则的C++特性。主要体现在如下两个方面:首先,RTTI需要支持typeid::name(),这就要求存储元数据,这会增加内存的使用。这是C++中唯一使用元数据的地方!
其次,RTTI的查找性能是不可预测的,因为对未知、第三方的共享库的链接会急剧增加库的解析时间!
正因为如此,RTTI也是许多工程的编码规范中所禁止的(例如,Firefox),因此这也成了禁止使用异常的又一重要原因。