Учитывая следующие фрагменты кода:
void foo() {
int arraySize = getMyComputedValue();
int dynamicArray[arraySize];
fillDynamicArray(&dynamicArray[0]);
for (int i = 0; i < arraySize; i++) {
// Do something with data
}
}
void bar() {
int arraySize = getMyComputedValue();
int* dynamicArray = new int[arraySize];
fillDynamicArray(dynamicArray);
for (int i = 0; i < arraySize; i++) {
// Do something with data
}
delete[] dynamicArray;
dynamicArray = NULL;
}
Оба создают динамическую область в памяти с переменной длиной, содержащей целые числа.Я обнаружил, что первый пример foo () (по крайней мере, в моей среде сборки) компилируется только с GCC.
Каковы точные различия между ними?Является ли первый пример просто расширением GNU, которое для нижнего примера является сокращением , позволяя компилятору определить, когда наступает правильное время для перераспределения?Или первый пример работает именно так, как говорит код, и выделяет память в стеке?