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

Пожалуйста, опубликуйте пункты, которые следует иметь в виду при разработке или написании кода для меньших результатов для встроенных систем.

Я не даю сведения о компиляторе или платформе, так как мне нужна общая информация. Но любая конкретная информация о ОС на базе Linux также приветствуется.

4 ответа

Решение

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

На самом деле есть несколько правил, которые мы определили:

  • нет динамического распределения
  • следовательно, нет STL
  • нет обработки исключений (очевидные причины)

Там нет общего ответа, только конкретные для языка / платформы... но

Маленький объем памяти...

  1. Не используйте Java, C#/ Mono, PHP, Perl, Python или что-либо еще с сборкой мусора
  2. Получите как можно ближе к металлу, используйте C
  3. Сделайте много профилирования, чтобы увидеть, где выделяется память, если вы используете динамическое распределение
  4. Убедитесь, что вы предотвращаете фрагментацию кучи, выделяя разумные куски и размеры кучи
  5. Избегайте рекурсивных функций, особенно тех, которые используют malloc(). Лучше выделить кусок и передать указатель.
  6. использовать бесплатно ();)
  7. Убедитесь, что ваши типы не больше, чем требуется
  8. Включить оптимизацию компилятора

Будет больше.

Для реальной низкой площади подумайте о сборке напрямую.

Мы все знаем, что Hello World на C или C++ имеет размер 20 Кб +(из-за всех библиотек по умолчанию, которые связаны). В сборе эти накладные расходы пропали. Как указано в комментариях, стандартные библиотеки можно немного уменьшить. Однако факт остается фактом: плотность кода, которую вы можете получить, когда сборка кода намного выше, чем компилятор генерирует из более высокого языка. Так что для кода, где важен каждый байт, используйте сборку.

также при программировании на устройствах с менее мощными процессорами, программирование на ассемблере может быть единственным способом сделать программу достаточно быстрой, чтобы она была в реальном времени достаточной для (например) управления машинами

Столкнувшись с такими ограничениями, рекомендуется предварительно выделить память, чтобы гарантировать, что система будет работать под нагрузкой. Шаблон проектирования, такой как "пул объектов", может использоваться для совместного использования ресурсов в системе.

Язык C обеспечивает жесткий контроль ресурсов (т. Е. Циклы памяти и вычислений). Это следует строго рассмотреть.

Избегайте рекурсии, так как ею легко злоупотреблять, и это может привести к переполнению стека.

Другие вопросы по тегам