可変長配列を使用する次の関数があるとします。
void func(int size)
{
int var1;
int arr[size];
int var2;
...
}
コンパイラは のアドレスをどのように決定しますvar2
か?
私が考えることができる唯一の方法は、 と のarr
後var1
に配置することvar2
です。
しかし、その場合、複数の可変長配列があった場合はどうなるでしょうか?
それらをすべて「通常の」変数の後に配置すると、最初のアドレスの解決に役立つだけです。
ここでの私の暗黙の仮定は、すべてのローカル変数 (VLA を含む) がスタックに割り当てられているということです。
C99標準で定義されていないことを認識しているため、問題は本質的にコンパイルに関するものです。