Подскажите, пожалуйста, какова плата за использование RTTI, что я при этом потеряю. Замедление работы программы? Увеличение используемой памяти? Каким образом вообще реализуется RTTI?
Здравствуйте, Aera, Вы писали:
A>Подскажите, пожалуйста, какова плата за использование RTTI, что я при этом потеряю. Замедление работы программы? Увеличение используемой памяти? Каким образом вообще реализуется RTTI?
Потребляемая память изменится несущественно, можешь потерять в скорости и надёжности, поскольку часть проверок перетянешь в compile-time из runtime, соответственно, потребуется дополнительное тестирование.
В "философии" в топике "Будущее C#" начиная отсюда
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
состоялась и ещё не завершилась интересная эээ... дискуссия по этому поводу. WH>А что у тебя еще есть что сказать?
Есть. Я же тебе обещался примерчик запостить.
... << RSDN@Home 1.1 beta 1 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Здравствуйте, 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<>).
Здравствуйте, MaximE, Вы писали:
ME> ... Соответсвенно, плата за это — небольшое разбухание имиджа модуля. На мой взгляд, интенсивное использование шаблонов часто ведет к намного большему разбуханию.
Абсолютно согласен. Это одна из проблем в использовании шаблонов.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!