плата за RTTI
От: Aera Беларусь  
Дата: 04.08.03 09:08
Оценка:
Здраствуйте,


Подскажите, пожалуйста, какова плата за использование RTTI, что я при этом потеряю. Замедление работы программы? Увеличение используемой памяти? Каким образом вообще реализуется RTTI?


С уважением,

Aera
--
RedApe
Re: плата за RTTI
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.08.03 16:09
Оценка:
Здравствуйте, Aera, Вы писали:

A>Подскажите, пожалуйста, какова плата за использование RTTI, что я при этом потеряю. Замедление работы программы? Увеличение используемой памяти? Каким образом вообще реализуется RTTI?


Потребляемая память изменится несущественно, можешь потерять в скорости и надёжности, поскольку часть проверок перетянешь в compile-time из runtime, соответственно, потребуется дополнительное тестирование.

В "философии" в топике "Будущее C#" начиная отсюда
Автор: Геннадий Васильев
Дата: 03.07.03
состоялась и ещё не завершилась интересная эээ... дискуссия по этому поводу.

По части реализации здесь
Автор: Павел Кузнецов
Дата: 15.05.03
уже было:

Также есть очень хороший источник Itanium C++ ABI, так сказать,
C++ внутренностями наружу:
http://www.codesourcery.com/cxx-abi/abi.html

... << RSDN@Home 1.1 beta 1 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: плата за RTTI
От: WolfHound  
Дата: 04.08.03 16:50
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>В "философии" в топике "Будущее C#" начиная отсюда
Автор: Геннадий Васильев
Дата: 03.07.03
состоялась и ещё не завершилась интересная эээ... дискуссия по этому поводу.

А что у тебя еще есть что сказать?
... << RSDN@Home 1.1 alpha 1 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: плата за RTTI
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.08.03 17:08
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>В "философии" в топике "Будущее C#" начиная отсюда
Автор: Геннадий Васильев
Дата: 03.07.03
состоялась и ещё не завершилась интересная эээ... дискуссия по этому поводу.

WH>А что у тебя еще есть что сказать?

Есть. Я же тебе обещался примерчик запостить.
... << RSDN@Home 1.1 beta 1 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: плата за RTTI
От: MaximE Великобритания  
Дата: 04.08.03 18:29
Оценка: 14 (4)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, Aera, Вы писали:


A>>Подскажите, пожалуйста, какова плата за использование RTTI, что я при этом потеряю. Замедление работы программы? Увеличение используемой памяти? Каким образом вообще реализуется RTTI?


ГВ>Потребляемая память изменится несущественно, можешь потерять в скорости и надёжности, поскольку часть проверок перетянешь в compile-time из runtime, соответственно, потребуется дополнительное тестирование.


Включение RTTI заставляет компилятор генерировать для классов ст-ру type_info, массив указателей на vtable базовых классов, указатель на начало объекта и другую служебную информацию (зависит от компилятора). Вся эта информация генерируется на этапе компиляции и размещается в read-only сегменте данных. Указатели на эти данные обычно размещаются по отрицательному смещению в vtable (которые тоже размещаются в read-only сегменте данных). Соответсвенно, плата за это — небольшое разбухание имиджа модуля. На мой взгляд, интенсивное использование шаблонов часто ведет к намного большему разбуханию.

Все эти данные используются только в двух случаях: когда ты используешь инструкцию (statement) typeid() и dynamic_cast<>. В остальных случаях эти данные не используется. Т.е. производительностью ты платишь только когда используешь эти две инструкции. Причем цена typeid() равна цене виртуального вызова. Только dynamic_cast<> может стоить относительно дорого, т.к. ему приходится путешествовать по графу иерархии, чтобы сделать down cast или cross cast (cross cast можно выполнить только с помощю dynamic_cast<>).
Re[3]: плата за RTTI
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.08.03 21:51
Оценка:
Здравствуйте, MaximE, Вы писали:

ME> ... Соответсвенно, плата за это — небольшое разбухание имиджа модуля. На мой взгляд, интенсивное использование шаблонов часто ведет к намного большему разбуханию.


Абсолютно согласен. Это одна из проблем в использовании шаблонов.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.