![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев |
Уважаемые господа.
Интересует ваше мнение относительно целесообразности конвертации С++ в С при разработке проектов реального времени. Я имею ввиду следующее: входной текст программы разработан на С++ с использованием ООП по полной программе (классы, виртуальные функции и т.д.). Эту программу монтируем на конкретную платформу DSP. Много ли я выиграю по скорости выполнения, если перепишу эту программу с С++ в С? Также прошу сбросить все ссылки по проблеме конвертации С++ в С. Спасибо... -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб |
Если С++ использовался только ради создания иерархии классов (т.е. использования достоинств ООП - наследования и полиморфизма), то можно свои классы оставить, а все остальное делать С-шное. Т.е. никаких там STL и всего такого.
|
|||
|
||||
setq |
|
|||
Unregistered |
ссылок не знаю, но слышал о такой программе - cfront - переводчик с языка си-с-классами на си - предшественник первых си++компиляторов, чтоли. м... может на странице страуструпа что-нибудь завалялось.
насчёт целесообразности... не могу сказать. насчёт STL... теоретически: будет ли STL помехой? почему? |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. |
Автоматическое преобразование, IMHO, не рационально. Это не даст выигрыша, а только лишит программу наглядности, присущей ООП. Если и переводить, то только руками. Либо автоматически с последующей оптимизацией.
|
|||
|
||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 |
Устранение классов из программы может поднять ее быстродействие
тк снимется лишний уровень косвенности - обращение через this-> к переменным класса и вызов виртуальных методов. Однако вообще не использовать классы - излишне, ведь обычно лишь 5% кода выполняется 95% времени. Ну, или 20% и 80%. Вот их-то и имеет смысл оптимизировать. |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев |
А разве транслятор, генерируя выходной ассемблерный код, сразу не снимает этот уровень косвенности, заменяя конкретными адресами? -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев |
Одно из достоинств С++ - это наличие виртуальных функций, значит если осталять подобные механизмы, выходной ассемблерный код будет работать с таблицами адресов этих виртуальных функции, что непременно ведёт к неоптимальности по памяти и к косвенной адресации в выходном ассемблерном коде... -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
val |
|
|||
![]() Program developer ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 992 Регистрация: 14.1.2003 Где: г. Киев |
Выходной код монтируется на спец. платформу, так что использование STL будет крайне избыточно. -------------------- Терпимость - величайшее благо человечества... Ярчайший признак интеллекта – постоянно хорошее настроение… |
|||
|
||||
RAN |
|
|||
Опытный ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 709 Регистрация: 14.3.2003 Где: Щёлково Моск.обл. |
Какая ещё STL? Здесь C++ не подходит, а Вы про STL. Эта библиотека полностью обстрагирована. А val хочет оптимизировать код на уровне asm'а. Тут STL вообще запрещено использовать.
|
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев |
Даже если использовать ООП при программировании на ассемблере, код все равно получится неоптимальным, это происходит потому, что программист при написании основной программы абстрагируется от низкого уровня, что моментально приводит к потери производительности. Неважно, на чем писалась программа (asm,C,C++), важно как она писалась.
Простое переписывание C -> C++ не даст выигрыша потому, что при этом надо будет реализовать все использованные возможности C++ средствами C (а переплюнуть создателей компилятора вряд ли получится).
немного посчитаем: вызов виртуальной функции: 1. взять адрес VMT 2. увеличить его соответственно номеру функции в ней 3. взять адрес функции 4. добавить в список параметров адрес экземпляра класса На каждом процессоре это будет занимать разное время, но порядок будет не очень различаться. Теперь нужно просто избавиться от функций, длительность выполнения которых сравнима с этим временем. Примером таких функий может служить операция взятия значения координаты вектора (если алгоритм отлажен, можно не проверять на выход за границы). А функции, которые требуют серьезных вычислений можно и не трогать (по сравнению с ними вышеописанная последовательность вызова почти ни на что не влияет) -------------------- qqq |
|||
|
||||
Crait |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 244 Регистрация: 20.2.2003 |
>А разве транслятор, генерируя выходной ассемблерный код, сразу не
>снимает этот уровень косвенности, заменяя конкретными адресами? Нет. Во всяком случае, BC 3.1 и BCB5. Максимум, что они делают в этом смысле - могут иногда прокешировать (подержать в регистрах) переменную класса. |
|||
|
||||
![]() ![]() ![]() |
Правила раздела «Флейм» | |
|
Добро пожаловать в «Флейм». В разделе не действуют многие правила:
Строго запрещено:
Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт. Глас Винграда:
Глас Философии:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Флейм | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |