Это может показаться вопросом новичка, но меня интересует способ, которым компилятор обычно создает массивы переменных размеров, как в следующей программе.
#include<iostream>
int main(){
int n;
std::cin>>n;
int a[n];
}
Из того, что я узнал, в C все значения инициализатора должны быть постоянными, чтобы компилятор знал, сколько памяти следует зарезервировать внутри функции, обычно путем вычитания указателя стека для размещения количества элементов в массиве. держит.
Для меня это имеет смысл. Однако я не совсем понимаю, как компиляторы обрабатывают указанную выше программу, поскольку она, кажется, работает с G ++ (MinGW), но не работает с Cl, компилятором C ++ от Microsoft. Я подозреваю, что GCC выделяет память в куче с помощью нестандартного расширения, но я не уверен в этом.
Кроме того, компилятор Microsoft не известен своей совместимостью со стандартами, поэтому я не удивлюсь, если он действительно ошибается в том, как он обрабатывает указанную выше программу.