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