Clang的vtable输出中的这个值是多少?

时间:2013-11-20 16:25:11

标签: c++ clang vtable

请考虑以下代码:

class base {
 public:
   base() = default;
   virtual int foo() { return 0; }
};

class derived : public base {
 public:
   derived() = default;
   virtual int foo() { return 1;}
};

使用Clang 3.3进行编译我得到了vtable的以下输出:

__ZTV7derived:
.long   0        <--- what is this?
.long   __ZTI7derived
.long   __ZN7derived3fooEv

如果我添加开关-fno-rtti,我会得到:

__ZTV7derived:
.long   0        <--- what is this?
.long   0        <--- type info removed by -fno-rtti
.long   __ZN7derived3fooEv

这是有道理的,因为TypeInfo现在无效,但第一个.long 0指的是什么?另外,为什么不-fno-rtti完全删除类型信息而不是仅仅删除它?我正在考虑手动编写一个通行证,但我想首先了解它的含义(我正在从嵌入式平台中挤出字节)

0 个答案:

没有答案