在 C++ 程序中启用 RTTI 会产生哪些内存/性能开销?
任何人都可以在 RTTI 机制的内部实现和相关开销之间进行一些说明吗?
我确实了解如何通过 typeid
和 dynamic_cast
使用 RTTI,我想知道的是运行时如何跟踪此信息以及它如何跟踪的内部实现细节是开销吗?
最佳答案
启用 RTTI 通常只会带来很小的开销。通常的实现带有一个指向对象 vtable 中类型信息结构的指针。由于无论如何都必须构造 vtable,因此额外的时间很少 - 这就像在类中添加另一个虚函数一样。
typeid
因此相当于调用虚函数。
dynamic_cast
较慢 - 它需要遍历继承层次结构来进行转换。过于频繁地调用 dynamic_cast
可能成为性能瓶颈。 '可以' 我的意思是它通常不会……
由于 typeinfo 结构需要存储在某个地方,因此可执行文件大小略有膨胀。在大多数情况下,它是不相关的。
关于c++ - C++ 中的 RTTI 开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408106/