Поскольку у вас, вероятно, недостаточно памяти стека для хранения этого большого массива.
Второй пример создает массив в стеке, в то время как первый пример создает массив, который не находится в стеке, а где-то в сегменте данных/Bss, поскольку вы явно указываете критерии хранения с использованием квалификатора static
.
Обратите внимание, что C++ стандарт не определяет stack
или heap
или data segment
или Bss segment
все эти реализации определены детали. Стандарт только определяет поведение, ожидаемое от переменных, объявленных с разными критериями хранения. Итак, , где переменные на самом деле создано - это реализация, но одна вещь наверняка - оба примера создадут массивы в разных областях памяти, а вторая сбой, потому что в этом регионе недостаточно памяти.
Кроме того, возможно, если вы создаете массив таких огромных размеров в реальной реализации, ваш дизайн кажется ошибочным, и вы можете подумать о его пересмотре.
Вы могли бы также рассмотреть возможность использования std::array или std::vector, вместо традиционных массивов с стилем.
Возможный дубликат [Ограничения по размеру массива] (http://stackoverflow.com/questions/9016538/array-size-limits) –