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

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

#include<iostream>

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

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

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

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

-121--1164286- Почему эти различные последовательности в TimeSpan в XAML? Я схожу с ума. Кто-нибудь может объяснить мне, почему эти форматы последовательностей, форматирующие одно и то же, так отличаются? < DataGridTextColumn Header = "Max Time" IsReadOnly = "True" Binding = "{Binding MaxTime,...

Я схожу с ума. Кто-нибудь может объяснить мне, почему эти форматы последовательностей, форматирующие одно и то же, так отличаются?

<DataGridTextColumn Header="Max Time" IsReadOnly="True" Binding="{Binding MaxTime, StringFormat=hh\\:mm\\:ss, TargetNullValue=---}"> 

<DataGridTextColumn Header="Min Time" IsReadOnly="True">
    <DataGridTextColumn.Binding>
        <Binding Path="MinTime" StringFormat="{}{0:hh':'mm':'ss}" TargetNullValue=" --- "/>
    </DataGridTextColumn.Binding>
 </DataGridTextColumn>

Конечно, каждый из них не работает на другом.

EDIT: Чем больше я работаю с WPF, тем больше я чувствую, что это не зрелый продукт.

7
задан Ignacio Soler Garcia 2 October 2011 в 15:35
поделиться