C++はもちろん当たり前だがC99準拠の処理系では
void foo(int n)
{
 double a[n];
 …
}

こんな風に整数の変数でスタック上配列を確保できる。
もちろん関数の途中でも{}で囲んでやりさえすればいつでも使える。

なんにせよC99準拠の処理系ならほぼ例外なく
何らかの形でallocaみたいな関数も実装されてると思ってるが。

しかし機械語レベルで見るとなんのことはない、x86でいうespを変数値ぶんだけ操作してるだけ。