Подтвердить что ты не робот

C vs С++ во встроенной Linux

Я разрабатываю приложение для встроенного Linux (ARM). Он будет выполняться 500 раз/сек, поэтому скорость важна. Я бы предпочел использовать С++, но я боюсь, что он будет медленнее, чем C, даже если я избегу таких необычных функций, как виртуальные функции. Есть ли причина использовать C или его так же хорошо писать на С++?

4b9b3361

Ответ 1

С++ вообще не накладывает штраф за время выполнения над C - (за исключением нескольких таких вещей, как RTTI).

За исключением нескольких нечетных обстоятельств, компилятор должен иметь возможность определить, какую виртуальную функцию вызывать во время компиляции, и поэтому не добавлять накладные расходы.

Edit: Ok с таким множеством компиляторов, процессоров, исполняемых файлов libs, ОС есть некоторые возможности С++, которые могут создавать более медленный код, есть некоторые функции, которые могут создать более быстрый код.

Но можем ли мы согласиться с тем, что С++ больше не исключается из встроенного использования?

Ответ 2

В С++ у вас есть такие вещи, как метапрограммирование шаблонов, которые разрешают во время компиляции несколько ситуаций, когда C или любой другой язык процедурного программирования должен был бы выполняться во время выполнения.

Я должен сказать больше. Шаблоны метапрограммирования и некоторые уловки наследования класса действительно потрясающие. Это может сэкономить вам много времени на обработку, которое вы потратили бы иначе на "ifing" и "переключение".

Это означает, что С++ может быть на самом деле быстрее, чем C, если он хорошо проведен.

Очевидно, вы можете запрограммировать "на C" с помощью С++, и у вас не будет никакого штрафа. Если вы не слишком любите С++, я бы посоветовал вам делать "C на С++" или "C с расширениями С++", чтобы воспользоваться преимуществами С++, но реальное преимущество, которое вы получите, - это программирование С++ путь. Там вы увидите, что С++ - это хорошая часть времени, или быстрее или чище, чем C или, по крайней мере, так быстро, как.

Не бойся. Лицо C++. После stdС++ (против libc) в размере кода почти не будет накладных расходов. Если ваше приложение от среднего до большого, оно будет разбавлено.

Я использую С++ из простого 8-битного ATmega в Marvell ARM9, проходя через AVR32 UC3 и Cortex-M3 и всегда нахожу его прибыльным.

Если вам нужна конкретная рекомендация в данной ситуации, не стесняйтесь спрашивать.

Ответ 3

Основной причиной выбора C over С++ является размер скомпилированного двоичного файла, который может быть реальным ограничением для встроенных систем.

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

Ответ 4

Пока вы ограничиваете возможности, которые вы используете, у вас не будет большой производительности, если таковая имеется, на С++ выше C. Функции, которые вы хотите избежать, включают: исключения, RTTI и сохраняют иерархию классов как (и использовать виртуальные функции экономно).

Ответ 5

С++ отлично, если в вашей встроенной системе достаточно оперативной памяти и флэш-памяти. Библиотека времени выполнения С++ (libstdС++) является большой и поставляется в дополнение к стандартной библиотеке C (libc), даже если вы используете только С++.

Ответ 6

Вы можете использовать С++, но будьте осторожны.

Для размера внимательно следите за файлом карты компоновщика. Вы можете найти его, включая тонны вещей, которые вам не нужны, только из невинно выглядящей декларации.

Для скорости, профиля или случайной паузы. Очень просто сделать больше new и delete, чем вам действительно нужно, особенно с классами контейнеров, и быть очень осторожным с такими вещами, как итераторы. Часто они делают вам неудобные просьбы.

Вы можете выполнить код на уровне ассемблера, чтобы убедиться, что он выполняет только то, что вам действительно нужно, что должно быть примерно таким же, как код C.

Ответ 7

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

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

В конечном счете, нет никакой замены для понимания того, что вы просили в каждой строке кода.

Ответ 8

Я использую плату ARM9 для аппаратного управления, и я использую как приложение C, так и С++ на плате 500 МГц. Вы можете использовать язык и то, как вы реализуете свою логику для реализации функциональности. Потому что я не обнаружил проблем с запуском приложения в течение дня, контролирующего аппаратное обеспечение.

При написании вашей программы тщательно выберите свою переменную, проверьте ее на наличие дополнительной команды/цикла, инициализации. также используйте флаг оптимизации Gcc во время компиляции.

У меня нет проблем с запуском программы Qt Application и C на плате ARM 9 на 500 Mhz.