2014-02-17 9 views
1

Почему максимальный массив зависит от локальной декларации и глобальной декларации?Максимальный размер массива в c

Я читал в блоге, что максимальный размер массива, который мы можем объявить, будет 10^6 в случае локальной декларации и между 10^7 до 2 * 10^8 в случае глобальной декларации. Что является причиной этого?

+4

Я стараюсь избегать подобных блогов. – UmNyobe

ответ

5

Эти цифры не означают вещи вообще, они специфичны для OS + Machine. Но локальная декларация и глобальная декларация выполняются в разных регионах виртуальной памяти. Локальные переменные находятся в стеке, который обычно меньше кучи (используется для динамически распределенных глобальных переменных).

+0

будет лимит как таковой для динамических массивов – nomorequestions

+0

Да, доступно количество памяти RAM. – UmNyobe

+0

@UmNyobe. Некоторые 32-разрядные платформы могут ограничить размер одного объекта (статически или динамически распределенного) до 2GiB, даже если для процесса доступно больше памяти (и может быть выделено как несколько объектов), чтобы предотвратить различия в указателях, которые переполняются a 'ptrdiff_t' определяется как 32-разрядное целое число со знаком. –

0

Глобальная декларация резервирует память на статической памяти, которая достаточно велика, чтобы не налагать проблемы с памятью. Но локальные объявления сохраняют память в стеке, которая ограничена памятью. Таким образом, вы не можете объявить массив как локальный объект с большим объемом памяти, иначе вы выйдете из диапазона памяти, который известен как переполнение стека

Смежные вопросы