Где macros C хранятся в памяти и как они потребляют больше памяти по сравнению с функциями?

Я искал в Интернете, где будут храниться macros C, хранящиеся в памяти, и как они потребляют больше памяти по сравнению с функциями? Не мог получить удовлетворительного ответа. Кто-нибудь, пожалуйста, дайте мне знать, как именно?

есть ли способ узнать память, потребляемую макросом в c?

И еще один вопрос возникает в моем сознании: предположим, что я decalre макрос #define START 10. И у меня есть переменная int i = 0, которую я бы заменил макросом, как это i = START. Теперь int i = 0 уже выделил память в стеке, и если я ставлю START вместо 0, это будет просто перераспределение в ранее выделенной памяти. Так pls говорят мне как оно будет потреблять больше памяти в этом контексте. Я не уверен, что я думаю, правильно, если я ошибаюсь, PLS исправить меня.

Предыдущий вопрос, заданный на этом сайте, не отвечает на эти вопросы.

Спасибо

Макросы представляют собой конструкцию препроцессора. Все macros заменяются их определениями, прежде чем компилятор даже увидит код.

Это означает, что если вы используете много макросов с большими заменами, они будут генерировать много кода. Вызов функций не работает таким образом, поскольку они вызывают одну функцию, которая имеет только один код.

Нет стандартного способа выяснить, сколько кода связано с макросами, нет.

Макросы не сохраняются в памяти в любом месте окончательной программы, но вместо этого код для макроса повторяется всякий раз, когда это происходит. Что касается реального компилятора, они даже не существуют, они были заменены препроцессором до того, как они дойдут до этого.

Причина, по которой это обычно занимает больше памяти, заключается в том, что она повторяется каждый раз, когда используется макрос. Нет общего способа определить, сколько памяти они будут занимать, но, честно говоря, соображения памяти на самом деле не являются причиной того, что предпочитают функции макросам.

Если у вас есть жжение, чтобы узнать объем потребляемой памяти, вы можете приблизиться к ней, посмотрев на parsingку места, где вы используете макрос, и умножаете количество раз, которое макрос появляется в исходном коде, на количество строк произведенной parsingки. Тем не менее, нет никакой гарантии, что различные применения макроса или того же использования в разных условиях будут производить идентичный код, поэтому это может быть только когда-либо грубой мерой.

Значения макросов C не сохраняются в памяти во время выполнения программы. Их значения вместо этого копируются туда, где они используются во время компиляции.

«Причина, по которой это обычно занимает больше памяти, – это то, что она повторяется каждый раз, когда используется макрос».

С современным компилятором в зависимости от настроек компиляции (FAST CODE / SMALL CODE) он может отображать часто используемый код и оптимизировать его в функции (SMALL), или он может встроить код для скорости (FAST).

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

Конечно, вы всегда можете использовать macros, которые вызывают функции, а не содержат большие встроенные разделы кода. Это полностью зависит от вашего выбора.