Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конвертация С++ в С, Имеет ли смысл это делать? 
:(
    Опции темы
val
  Дата 2.10.2003, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев




Уважаемые господа.
Интересует ваше мнение относительно целесообразности конвертации С++ в С при разработке проектов реального времени. Я имею ввиду следующее: входной текст программы разработан на С++ с использованием ООП по полной программе (классы, виртуальные функции и т.д.). Эту программу монтируем на конкретную платформу DSP. Много ли я выиграю по скорости выполнения, если перепишу эту программу с С++ в С?
Также прошу сбросить все ссылки по проблеме конвертации С++ в С. Спасибо...



--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
podval
Дата 2.10.2003, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб




Если С++ использовался только ради создания иерархии классов (т.е. использования достоинств ООП - наследования и полиморфизма), то можно свои классы оставить, а все остальное делать С-шное. Т.е. никаких там STL и всего такого.
PM WWW ICQ   Вверх
setq
Дата 2.10.2003, 21:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ссылок не знаю, но слышал о такой программе - cfront - переводчик с языка си-с-классами на си - предшественник первых си++компиляторов, чтоли. м... может на странице страуструпа что-нибудь завалялось.

насчёт целесообразности... не могу сказать.

насчёт STL... теоретически: будет ли STL помехой? почему?
  Вверх
RAN
Дата 2.10.2003, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.




Автоматическое преобразование, IMHO, не рационально. Это не даст выигрыша, а только лишит программу наглядности, присущей ООП. Если и переводить, то только руками. Либо автоматически с последующей оптимизацией.
PM MAIL ICQ   Вверх
Crait
Дата 3.10.2003, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003




Устранение классов из программы может поднять ее быстродействие
тк снимется лишний уровень косвенности - обращение через this->
к переменным класса и вызов виртуальных методов.
Однако вообще не использовать классы - излишне, ведь обычно
лишь 5% кода выполняется 95% времени. Ну, или 20% и 80%.
Вот их-то и имеет смысл оптимизировать.
PM MAIL   Вверх
val
Дата 3.10.2003, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев




Цитата
Устранение классов из программы может поднять ее быстродействие
тк снимется лишний уровень косвенности - обращение через this->
к переменным класса и вызов виртуальных методов.


А разве транслятор, генерируя выходной ассемблерный код, сразу не снимает этот уровень косвенности, заменяя конкретными адресами?


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
val
Дата 3.10.2003, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев




Цитата
Если С++ использовался только ради создания иерархии классов (т.е. использования достоинств ООП - наследования и полиморфизма)


Одно из достоинств С++ - это наличие виртуальных функций, значит если осталять подобные механизмы, выходной ассемблерный код будет работать с таблицами адресов этих виртуальных функции, что непременно ведёт к неоптимальности по памяти и к косвенной адресации в выходном ассемблерном коде...


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
val
Дата 3.10.2003, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Program developer
**


Профиль
Группа: Участник Клуба
Сообщений: 992
Регистрация: 14.1.2003
Где: г. Киев




Цитата
насчёт STL... теоретически: будет ли STL помехой? почему?


Выходной код монтируется на спец. платформу, так что использование STL будет крайне избыточно.


--------------------
Терпимость - величайшее благо человечества...
Ярчайший признак интеллекта – постоянно хорошее настроение…
PM MAIL ICQ   Вверх
RAN
Дата 3.10.2003, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 709
Регистрация: 14.3.2003
Где: Щёлково Моск.обл.




Какая ещё STL? Здесь C++ не подходит, а Вы про STL. Эта библиотека полностью обстрагирована. А val хочет оптимизировать код на уровне asm'а. Тут STL вообще запрещено использовать.
PM MAIL ICQ   Вверх
maxim1000
Дата 3.10.2003, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев




Даже если использовать ООП при программировании на ассемблере, код все равно получится неоптимальным, это происходит потому, что программист при написании основной программы абстрагируется от низкого уровня, что моментально приводит к потери производительности. Неважно, на чем писалась программа (asm,C,C++), важно как она писалась.
Простое переписывание C -> C++ не даст выигрыша потому, что при этом надо будет реализовать все использованные возможности C++ средствами C (а переплюнуть создателей компилятора вряд ли получится).
Цитата
Одно из достоинств С++ - это наличие виртуальных функций, значит если осталять подобные механизмы, выходной ассемблерный код будет работать с таблицами адресов этих виртуальных функции, что непременно ведёт к неоптимальности по памяти и к косвенной адресации в выходном ассемблерном коде...

немного посчитаем:
вызов виртуальной функции:
1. взять адрес VMT
2. увеличить его соответственно номеру функции в ней
3. взять адрес функции
4. добавить в список параметров адрес экземпляра класса
На каждом процессоре это будет занимать разное время, но порядок будет не очень различаться. Теперь нужно просто избавиться от функций, длительность выполнения которых сравнима с этим временем. Примером таких функий может служить операция взятия значения координаты вектора (если алгоритм отлажен, можно не проверять на выход за границы). А функции, которые требуют серьезных вычислений можно и не трогать (по сравнению с ними вышеописанная последовательность вызова почти ни на что не влияет)


--------------------
qqq
PM WWW   Вверх
Crait
Дата 3.10.2003, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003




>А разве транслятор, генерируя выходной ассемблерный код, сразу не
>снимает этот уровень косвенности, заменяя конкретными адресами?

Нет. Во всяком случае, BC 3.1 и BCB5.
Максимум, что они делают в этом смысле - могут иногда прокешировать
(подержать в регистрах) переменную класса.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.1056 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.