Размер динамического массива против статического массива

0

Каков максимальный размер статического массива и динамический массив? Я думаю, что нет ограничений для динамического массива, но почему статические массивы имеют ограниченный размер?

  • 0
    Там нет диапазона как такового. Много зависит от конфигурации вашей машины.
  • 0
    @Digital_Reality Я спросил причина int Data[8][499][15]; не работает на моем компьютере
Показать ещё 6 комментариев
Теги:
arrays

2 ответа

4
Лучший ответ

Необработанное исключение в 0x011164A7 в StackOverflow.exe: 0xC00000FD: переполнение стека (параметры: 0x00000000, 0x00482000)

Это больше похоже на ошибку времени выполнения. Точнее - переполнение стека.

В большинстве случаев размер массива ограничен только доступной памятью. Тем не менее, ограничение на объекты, выделенные стеком, обычно намного более суровое. По умолчанию это 1Mb для Windows и 8Mb для Linux. Похоже, что ваш массив и другие данные уже в стеке занимают больше места, чем предел.

Существует несколько способов избежать этой ошибки:

  1. Сделайте этот массив static или объявите его на верхнем уровне вашего модуля. Таким образом, он будет выделен в сегменте .bss вместо стека.
  2. Используйте malloc/new чтобы явно выделить этот массив в куче.
  3. Используйте коллекцию C++, такую как std::vector а не массивы.
  4. Увеличьте ограничение размера стека. В Linux это можно сделать с помощью ulimit -s unlimited
  • 1
    У gcc есть переключатель для увеличения размера стека. В моей системе он может превышать 1 ГБ (по умолчанию 2 МБ).
0

Максимальный размер массива определяется объемом памяти, доступ к которой может получить программа. В 32-разрядной системе максимальный объем памяти, который может быть адресован указателем, составляет 2 ^ 32 байта, что составляет 4 гигабайта. Фактический предел может быть меньше, в зависимости от деталей реализации операционной системы.

Обратите внимание, что это не имеет никакого отношения к объему физической памяти, доступной вам. Даже на машине с объемом памяти менее 1 ГБ вы можете выделить 2-гигабайтный массив... он просто будет медленным, так как большая часть массива будет в виртуальной памяти, заменена на диск.

  • 0
    У меня есть struct (232 B) и я распределил ее следующим образом: struct_name Data [8] [499] [15]; так почему он не работает во время компиляции?
  • 0
    @Quest, какой компилятор вы используете и какую ошибку вы получаете?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню