在VC++下,一个多态类,在对象的this指针(指向vtable)之上多了一个指针,指向它的RTTI信息。
我想知道对于 GCC 的编译代码,对象是否存储与其 RTTI 信息相关的额外信息,有没有办法在 c++ 代码中访问它,或者 gdb 可以通过固定偏移量/位置访问它?
谢谢。
最佳答案
多态性的 C++ 对象布局依赖于实现。例如:
根据他们的作者,这两种实现都使用了一个位于 vtable 之前的 RTTI 指针。
请注意,两者都不同于 Bjarne Stroustrup(参见“C++ 的设计与演化”)考虑的原始内存布局,后者将 RTTI 指针作为 vtable 的第一个元素。我不完全清楚为什么他们会偏离这个更简单的想法。也许这是由于兼容性原因,仅引入了 RTTI in 1998 .对于 Visual C++,也可能有一些专利考虑:当时,一个 Microsoft's patent保护他们自己的 vtable 布局)。
所有这些都是不可移植的,因此只有当您想要剖析您的代码或编写一些调试代码时才会对它感兴趣。如果您打算编写可移植软件,最好限制自己使用 type_info
与 typeid()
.
关于c++ - 如何从 "this"指针知道 gcc 的 c++ 对象的 RTTI 信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39738359/