Каково это значение в выводе vtable из Clang?

Рассмотрим следующий код:

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 не удаляет информацию о типе полностью, а просто обнуляет ее? Я рассматриваю возможность написания прохода, чтобы сделать это вручную, но сначала я хотел бы узнать о последствиях этого (я выжимаю байты из встроенной платформы)


person Sam Cristall    schedule 20.11.2013    source источник
comment
@ММ. Спасибо, похоже все! Хотя мне все еще любопытно, что произойдет, если я удалю эту информацию вручную (поскольку -fno-rtti не удаляет ее полностью)   -  person Sam Cristall    schedule 20.11.2013
comment
Вторая запись обнуляется для двоичной совместимости. Например, вы можете связать библиотеку с поддержкой rtti из программы без rtti.   -  person François Moisan    schedule 20.11.2013
comment
@FrançoisMoisan Понятно, в этом есть смысл. Если я делаю это как оптимизацию всей программы, тогда я буду в безопасности? Я уже строго запрещаю dynamic_cast и множественное наследование.   -  person Sam Cristall    schedule 20.11.2013
comment
@СэмКристалл. Больше ничего сказать не могу. Не уверен, что компилятор делает с остальной частью этой информации. Предполагается ли такое же смещение для поиска виртуальной функции? Если это произойдет, вы столкнетесь с целой кучей новых проблем. Вам потребуются глубокие знания о том, что делает компилятор.   -  person François Moisan    schedule 20.11.2013
comment
@FrançoisMoisan Мне придется покопаться в этом, чтобы проверить это, меня в основном интересовали последствия вырезания этой информации для языка C ++. Спасибо за вашу помощь!   -  person Sam Cristall    schedule 20.11.2013