Определение области стека для функций

#c #memory #memory-management

Вопрос:

У меня есть изображение ниже и main вызовы функций a = foo(12, 15, 18) ; На изображении ниже, является ли рамка в main основном для всего стека? И рамка для foo() -это место, где хранится регистр EBP main , пока он не сохранит регистры?

Кроме того, будет ли выделена область памяти для переменной a ?

введите описание изображения здесь

Комментарии:

1. is the frame for main basically the whole of stack? — нет, main это такая же функция, как и любая другая, за исключением того, что она вызывается логикой запуска процесса в O/S. Независимо от того, принадлежат ли аргументы, переданные функции, к стеку вызывающего абонента или вызываемого абонента, в глазах наблюдателя. И будет ли выделена область стека a , зависит от того, для чего она будет использоваться после назначения (а также от настроек компилятора).

2. Хорошо, спасибо, что если a используется для умножения на константу?

3. Это будет зависеть от контекста. Попробуйте сами, например, на godbolt .