Какую информацию хранит RTTI для полиморфного объекта?

Прежде чем я начну, я знаю, что полиморфный объект имеет виртуальную таблицу для выбора правильного метода во время выполнения. Однако есть ли дополнительная информация, которую содержит каждый полиморфный объект (за исключением виртуальной таблицы)?

Я пытаюсь измерить размер/стоимость полиморфного объекта с включенным RTTI по ​​сравнению с неполиморфным объектом. Я знаю только о накладных расходах vtable и задаюсь вопросом, что еще хранится в RTTI.

РЕДАКТИРОВАТЬ: скажем, для компилятора GCC


person user997112    schedule 04.01.2014    source источник
comment
Представьте, что компилятор добавил в виртуальную таблицу скрытую функцию: GetAllRTTIdata. Поскольку виртуальная таблица существует только один раз для каждого класса, а не один раз для объекта, и вы добавляете в нее только одну запись, накладные расходы практически отсутствуют.   -  person Mark Ransom    schedule 04.01.2014


Ответы (1)


Там также может быть имя типа, определяемое реализацией (для std::type_info::name(), которое теоретически может содержать абсолютно что угодно), но в остальном это просто vtable. Конечно, я не могу придумать ничего другого, что должно быть там, чтобы удовлетворять правилам языка.

Об общем случае можно сказать немногое; это полностью зависит от реализации, и вы ее не указали. Какой-нибудь компилятор мог бы включить рецепт куриного супа, если бы захотел.

person Lightness Races in Orbit    schedule 04.01.2014
comment
Я нашел это, что может мне помочь: stackoverflow.com/ questions/579887/how-expensive-is-rtti?rq=1 - person user997112; 04.01.2014
comment
@user997112: user997112: Мне нужно изучить исходный код GCC, что может занять несколько дней. Почему тебя это беспокоит? - person Lightness Races in Orbit; 04.01.2014