Использует ли функция inlining больше ОЗУ или ПЗУ? и что влияет на оперативную память микроконтроллера? - PullRequest
1 голос
/ 16 марта 2019

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

Теперь я запутался между использованием оперативной памяти и ПЗУ встроенной функции.

Может ли кто-нибудь объединить использование памяти встроенной функцией с использованием ОЗУ и ПЗУ, особенно в контексте чистого кода.

Ответы [ 2 ]

1 голос
/ 16 марта 2019

Ваш компоновщик сможет сгенерировать карту ссылок со сводной информацией об использовании ПЗУ и ОЗУ - вы можете создавать с использованием встроенных функций и без них и увидеть результат самостоятельно.

Встраивание приводит к тому, что копии кода заменяют вызовы одной копии кода, поэтому по определению пространство кода (ПЗУ в вашем случае) увеличивается.Это мало влияет на оперативную память, хотя и уменьшает использование стека на небольшую величину, поскольку обратный адрес не требуется.Это сокращение времени выполнения и не будет отображаться на карте ссылок.

Это будет иметь значение только в том случае, если ваш компилятор решит применить запрос inline.GCC, например, не будет делать это на уровне оптимизации -O0 (по умолчанию), и даже в этом случае может не делать этого при любых обстоятельствах, и может даже встроенный код, который явно не помечен для встраивания.

Ваш компилятор может иметь средства для принудительного встраивания, но ключевое слово inline не в этом - например, в GCC вы бы использовали атрибут функции __attribute__((always_inline)).Однако второе предположение о компиляторе, когда дело доходит до того, что следует и чего не следует указывать, обычно является плохой идеей для современного оптимизирующего компилятора.Как правило, он будет принимать более целостные решения на основе кода любого значительного размера без усилий разработчика.

0 голосов
/ 16 марта 2019

Если вы запускаете свой код из флэш-памяти, длина кода не влияет на использование вашей оперативной памяти.Конечно, код будет длиннее, если функция встроена более одного раза (но это не гарантируется ключевым словом inline).

Другой вопрос - использование памяти SRAM для хранения локальных переменных.Обычно он будет ниже, так как встраивание позволяет проводить более агрессивные оптимизации (встроенные функции можно использовать только в том случае, если оптимизация включена - в противном случае они не будут встроены).

ключевое слово «inline» - только предложение для компилятора,если вы хотите форсировать вставку, вам нужно использовать атрибут или прагму - для gcc __attribute__((always_inline))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...