Кто-нибудь знает, есть ли способ исключить определенные функции из оптимизатора времени компоновки GCC? Мы тестируем использование оптимизатора времени компоновки GCC в небольшом встроенном проекте ARM, и при его включении высвобождается приличное количество невероятно ценной флэш-памяти, но это вызывает серьезные проблемы с производительностью для некоторых функций.
Я пытаюсь выяснить, есть ли способ с помощью #pragma или чего-то подобного, чтобы исключить определенные функции из оптимизатора времени компоновки. Это позволит нам использовать большую часть экономии на флэш-памяти без снижения производительности этих функций.
Кстати, какую устаревшую микросхему вы используете? У $ 3 есть 512kb, что много.
Не уверен, что это правильный способ справиться с этим, но вы можете посмотреть на такие атрибуты, как noipa (или более слабые атрибуты в его списках документации).
@ PeterJ_01 Мы используем NXP Kinetis EA micro. Это автомобильная микросхема, и стоимость этого проекта имеет значение в копейках. Я ценю эту мысль, но я бы не стал задавать этот вопрос, если бы можно было просто перейти к большей части (поверьте мне, я бы хотел пойти дальше).
Так как же LTO может уменьшить использование флэш-памяти? Только не встраивая функцию.
Я вижу, что это старый вопрос, но, поскольку ответа нет, я предлагаю его в качестве решения. Если вы поместите функции, которые должны быть не затронуты LTO, в отдельный исходный файл и скомпилируете его без флагов LTO, ld не сможет выполнить LTO для этих функций.
Сделайте их всегда встроенными