Размер кадра стека в Linux – всегда ли он статичен? ⇐ Linux
-
Anonymous
Размер кадра стека в Linux – всегда ли он статичен?
Чтобы сделать вопрос более конкретным, рассмотрим приведенный ниже пример (допустим, я отключил всю оптимизацию, чтобы мои фиктивные функции не были оптимизированы):
#include void func0 () { int32_t a = 0; } void func1() { int32_t a = 0, b = 1, c = 2, d = 3, e = 4; } void func2() { int32_t a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; } int main(void) { функция0(); функция1(); функция2(); вернуть 0; } У меня есть три функции: func1/func2/func3, и переменные, определенные внутри них, занимают разный объем памяти (т. е. func1 использует 4 байта, func2 использует 20 байтов и func3 использует 40 байтов).
Мой вопрос: для одного вызова функции моя программа всегда использует объем памяти, эквивалентный размеру кадра стека, независимо от фактического пространства, необходимого для переменной?
Иными словами, для того, чтобы программа вызывала func1, func2 или func3, она будет использовать одинаковое количество память?
Чтобы сделать вопрос более конкретным, рассмотрим приведенный ниже пример (допустим, я отключил всю оптимизацию, чтобы мои фиктивные функции не были оптимизированы):
#include void func0 () { int32_t a = 0; } void func1() { int32_t a = 0, b = 1, c = 2, d = 3, e = 4; } void func2() { int32_t a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; } int main(void) { функция0(); функция1(); функция2(); вернуть 0; } У меня есть три функции: func1/func2/func3, и переменные, определенные внутри них, занимают разный объем памяти (т. е. func1 использует 4 байта, func2 использует 20 байтов и func3 использует 40 байтов).
Мой вопрос: для одного вызова функции моя программа всегда использует объем памяти, эквивалентный размеру кадра стека, независимо от фактического пространства, необходимого для переменной?
Иными словами, для того, чтобы программа вызывала func1, func2 или func3, она будет использовать одинаковое количество память?
Мобильная версия