在C++程序中启用RTTI的内存/性能开销是多少?
任何人都可以在RTTI机制的内部实现和相关的开销之间提出一些建议吗?
我明白如何通过使用RTTI typeid和dynamic_cast,我试图了解的是运行时间如何跟踪这些信息的内部实现细节,它是如何开销?
Ale*_*ler 21
启用RTTI通常只会带来很小的开销.通常的实现带有指向对象的vtable中的类型信息结构的指针.由于必须构造vtable,所以额外的时间很短 - 就像在类中添加另一个虚函数一样.
typeid因此可以与调用虚函数相媲美.
dynamic_cast速度较慢 - 它需要遍历继承层次结构才能进行转换.dynamic_cast过于频繁地呼叫可能是性能瓶颈.通过' 可以 '我的意思是它通常不会......
由于typeinfo结构需要存储在某个地方,因此可执行文件大小略有膨胀.在大多数情况下,它不相关.
请阅读本文档中的相应部分.
总结一下:
typeid(5.3.7):找到vtable,通过找到大多数派生类对象,然后从该对象的vtable中提取type_info.与函数调用相比,它仍然很慢;
dynamic_cast(5.3.8):如上所述找到type_info,然后确定是否可以进行转换,然后调整指针.运行时成本取决于所涉及的两个类的类层次结构中的相对位置.目前,向下和交叉播放非常缓慢(尽管在这里您可以找到有关dynamic_cast可能(但受限制)的常量时间实现的文章).
| 归档时间: |
|
| 查看次数: |
4185 次 |
| 最近记录: |