【问题标题】:How to know a gcc's c++ object's RTTI information from "this" pointer?如何从“this”指针中获知 gcc 的 c++ 对象的 RTTI 信息?
【发布时间】:2016-09-28 04:56:51
【问题描述】:

在VC++这个多态类下,对象的this指针(指向vtable)上方多了一个指针,指向它的RTTI信息。

我想知道对于 GCC 的编译代码,一个对象是否存储了与其 RTTI 信息相关的额外信息,有没有办法在 c++ 代码中访问它,或者可以通过固定偏移量/位置由 gdb 访问?

谢谢。

【问题讨论】:

标签: c++ pointers gcc polymorphism rtti


【解决方案1】:

多态的 C++ 对象布局依赖于实现。例如:

根据他们的作者,这两个实现都使用一个 RTTI 指针,它位于 vtable 之前。

请注意,两者都不同于 Bjarne Stroustrup 考虑的原始内存布局(参见“C++ 的设计和演变”),后者将 RTTI 指针作为 vtable 的第一个元素。我不完全清楚他们为什么偏离这个更简单的想法。这可能是由于兼容性原因,RTTI 仅被引入in 1998。对于 Visual C++,也可能有一些专利考虑:当时,Microsoft's patent 保护了他们自己的 vtable 布局。

所有这些都是不可移植的,因此只有在您想剖析代码或编写一些调试代码时才有意义。如果您打算编写便携式软件,最好将自己限制在type_infotypeid()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2020-12-31
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多