В чем преимущества отключения RTTI из настроек компилятора?

Судя по этому (Насколько дорого обходится RTTI?), кажется очевидным, что динамическое приведение намного дороже, чем сравнение статических типов, но мне интересно, стоит ли отключать опцию RTTI в опции компилятора (VS2010, / GR-)

У меня в коде нет динамического приведения (я заменил их на статический). Но делает ли параметр (/ GR-) что-нибудь кроме выдачи ошибок при использовании динамического приведения? Есть ли там оптимизация памяти или кода?

Заранее спасибо.


person SeniorLee    schedule 28.01.2014    source источник


Ответы (2)


Прямо из MSDN (выделено мной):

Когда / GR включен, компилятор определяет макрос препроцессора _CPPRTTI. По умолчанию / GR включен. / GR - отключает информацию о типах во время выполнения.

Используйте / GR, если компилятор не может статически разрешить тип объекта в вашем коде. Параметр / GR обычно требуется, если в вашем коде используется оператор dynamic_cast или typeid. Однако / GR увеличивает размер разделов .rdata вашего изображения. Если в вашем коде не используются dynamic_cast или typeid, / GR- может создать изображение меньшего размера.

Похоже, что в вашем случае отключение RTTI того стоит.

person legends2k    schedule 28.01.2014
comment
Я удивлен, что нет упоминания о исключениях. Я ожидал, что предложение catch будет использовать RTTI под сценой, чтобы проверить, соответствует ли исключение предложению (по крайней мере, так оно и есть в Itanium ABI), поэтому мне интересно, генерирует ли MSVC код, который а) использует другой механизм для исключения или б) использует облегченный RTTI, даже если /GR указан для поддержки исключений. - person Matthieu M.; 28.01.2014
comment
Похоже, у них есть отдельный вариант для этого /EH/GX), который, кажется, указывает на то, что использует другой механизм исключения. - person legends2k; 28.01.2014

Может произойти некоторое уменьшение памяти (поскольку данные, необходимые для RTTI, не нужны), но в большинстве практических случаев вы обнаружите, что это совершенно незначительно, поэтому в большинстве практических случаев оно того не стоит.

person Wojtek Surowka    schedule 28.01.2014