Моменты, которые следует учитывать при проектировании или кодировании для достижения меньших результатов
-
21-09-2019 - |
Вопрос
Пожалуйста, укажите моменты, которые следует иметь в виду при проектировании или кодировании для получения меньших результатов для встраиваемых систем.
Я не даю подробностей о компиляторе или платформе, так как мне нужна общая информация.Но любая конкретная информация об ОС на базе Linux также приветствуется.
Решение
Зависит от того, насколько низко вы хотите опуститься.В настоящее время я программирую для фискальных принтеров, и там нет операционной системы, и главное правило - никакого динамического выделения памяти.Самое смешное, что я все же убедил команду писать полностью современный C ++ ;).
На самом деле есть несколько правил, с которыми мы определились:
- нет динамического распределения
- следовательно, нет STL
- нет обработки исключений (очевидные причины)
Другие советы
Там нет никакого общий ответ, только те , которые специфичны для языка / платформы ...но
Небольшой объем памяти ...
- Не используйте Java, C # / mono, PHP, Perl, Python или что-либо еще со сборкой мусора
- Получить как как можно ближе к металлу, насколько это возможно, Использовать C
- Выполните большое профилирование, чтобы увидеть, где выделяется память, если вы используете динамическое распределение
- Убедитесь, что вы предотвращение фрагментации кучи путем выделения разумных фрагментов и размеров кучи
- Избегать рекурсивные функции особенно те, которые используют malloc().Лучше выделить фрагмент и передать указатель по кругу.
- используйте бесплатно () ;)
- Убедитесь, что ваши типы не больше, чем требуется
- Включить оптимизацию компилятора
Их будет еще больше.
для получения действительно малой занимаемой площади рассмотрите возможность выполнения сборки напрямую.
Мы все знаем, что Hello World на C или C ++ составляет 20 кб + (из-за всех библиотек по умолчанию, которые связываются).В Сборке эти накладные расходы исчезли.Как указывалось в комментариях, можно совсем немного сократить стандартные библиотеки.Однако факт остается фактом: плотность кода, которую вы можете получить при написании ассемблера, намного выше, чем компилятор сгенерирует на более высоком языке.Итак, для кода, где важен каждый байт, используйте assembly .
кроме того, при программировании на устройствах с менее производительными процессорами программирование на языке ассемблера может быть вашим единственным способом сделать программу достаточно быстрой, чтобы она работала в режиме реального времени (например) для управления машинами
Сталкиваясь с такими ограничениями, желательно предварительное выделение памяти для того, чтобы гарантировать, что система будет работать под нагрузкой.Шаблон проектирования, такой как "объединение объектов", может быть использован для совместного использования ресурсов внутри системы.
В C язык обеспечивает ограниченный ресурс (т.е.управление памятью и вычислительными циклами).Это должно быть тщательно обдумано.
Избегать рекурсия поскольку этим легко злоупотреблять и это может привести к переполнению стека.