Как компиляторы обрабатывают массивы переменной длины

Это может показаться вопросом новичка, но меня интересует способ, которым компилятор обычно создает массивы переменных размеров, как в следующей программе.

#include<iostream>

int main(){
  int n;
  std::cin>>n;
  int a[n];
}

Из того, что я узнал, в C все значения инициализатора должны быть постоянными, чтобы компилятор знал, сколько памяти следует зарезервировать внутри функции, обычно путем вычитания указателя стека для размещения количества элементов в массиве. держит.

Для меня это имеет смысл. Однако я не совсем понимаю, как компиляторы обрабатывают указанную выше программу, поскольку она, кажется, работает с G ++ (MinGW), но не работает с Cl, компилятором C ++ от Microsoft. Я подозреваю, что GCC выделяет память в куче с помощью нестандартного расширения, но я не уверен в этом.

Кроме того, компилятор Microsoft не известен своей совместимостью со стандартами, поэтому я не удивлюсь, если он действительно ошибается в том, как он обрабатывает указанную выше программу.

10
задан user852689 2 October 2011 в 15:24
поделиться