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

StackOverflow https://stackoverflow.com/questions/2094895

  •  21-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Небольшой объем памяти ...

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

Их будет еще больше.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top