Предположим, у меня есть следующая функция, использующая массив переменной длины:
void func(int size)
{
int var1;
int arr[size];
int var2;
...
}
Как компилятор определяет адрес var2
?
Единственный способ, который я могу придумать, это поместить arr
после var1
и var2
.
Но в таком случае, что, если массивов переменной длины несколько?
Размещение их всех после «обычных» переменных помогло бы разрешить только адрес первой.
Мое неявное предположение состоит в том, что все локальные переменные (включая VLA) размещены в стеке.
Я понимаю, что это не определено стандартом C99, поэтому вопрос по сути о компиляции.
var2
не обязательно располагать на фиксированном смещении от чего-либо. Компилятор может написать дополнительный код для вычисления местоположений вместо использования фиксированных смещений. Он уже делает это, чтобы вычислить, где находитсяarr
, предполагая, что VLA находятся в стеке, а стек растет вниз. - person user2357112 supports Monica   schedule 28.07.2014