c++ - C++ 中的 RTTI 开销

标签 c++ casting rtti

在 C++ 程序中启用 RTTI 会产生哪些内存/性能开销?
任何人都可以在 RTTI 机制的内部实现和相关开销之间进行一些说明吗?
我确实了解如何通过 typeiddynamic_cast 使用 RTTI,我想知道的是运行时如何跟踪此信息以及它如何跟踪的内部实现细节是开销吗?

最佳答案

启用 RTTI 通常只会带来很小的开销。通常的实现带有一个指向对象 vtable 中类型信息结构的指针。由于无论如何都必须构造 vtable,因此额外的时间很少 - 这就像在类中添加另一个虚函数一样。

typeid 因此相当于调用虚函数。 dynamic_cast 较慢 - 它需要遍历继承层次结构来进行转换。过于频繁地调用 dynamic_cast可能成为性能瓶颈。 '可以' 我的意思是它通常不会……

由于 typeinfo 结构需要存储在某个地方,因此可执行文件大小略有膨胀。在大多数情况下,它是不相关的。

关于c++ - C++ 中的 RTTI 开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408106/

相关文章:

c++ - FFMPEG:多线程解码死锁?

具有数组输入 : Error:|Cannot cast float to float*| without any cast 的自定义函数

java - JSP 编译错误

Delphi 2010 RTTI - RttiContext.FindType

c++ - C++ RTTI 是否始终适用于所有平台?

c++ - 链表中的唯一指针 - 未处理的异常,堆栈溢出

c++ - 检查 std::string 是否只有空格的有效方法

casting - Swift 中的 float 划分和类型转换

Delphi - 将 TValue 传递给泛型方法

c++ - 查找数组中的元素和出现的次数