каков максимальный размер 3D-массива в C

Я делаю программу 3D-массива на C.

Когда я ввожу [31][11][99], код работает нормально.

Но когда я ввожу [31][11][999] код не запускается.

Это из-за array size ??

Если причина в этом... то каков будет максимальный размер массива для 3D array программы на C.


person user2987541    schedule 13.11.2013    source источник
comment
вам ДЕЙСТВИТЕЛЬНО нужно дать нам немного больше информации. Максимума нет, и не из-за размера массива, каким бы он ни был. Он компилируется?   -  person user1338    schedule 13.11.2013
comment
Нам нужно увидеть код, чтобы иметь возможность комментировать.   -  person Oliver Matthews    schedule 13.11.2013
comment
проверьте максимальный размер стека вашей системы и посмотрите, преодолеет ли его ваш массив   -  person Davide Berra    schedule 13.11.2013
comment
Ограничение памяти для автоматических переменных (выделенный стек) зависит от реализации. Теоретически даже что-то такое маленькое, как int arr[10];, может не выделить память. Но на практике, зная размер кадра стека, все должно быть в порядке. Проблема с большим выделением стека заключается в том, что нет простого способа обнаружить сбои выделения. Если вы даже думаете, что можете превысить лимит стека, вам, вероятно, следует динамически распределять память. Связано:Почему C не определяет минимальный размер массива?   -  person P.P    schedule 13.11.2013
comment
Нет ограничений в массиве   -  person Just code    schedule 13.11.2013


Ответы (2)


Это зависит от того, где вы выделяете массив. Если вы выделяете его локально/статически, это зависит от доступного размера стека. Сколько стековой памяти выделяется процессам, зависит от конкретной операционной системы.

Если у вас закончилось место в стеке, вы получите переполнение стека во время выполнения. Поэтому вы всегда должны динамически распределять большие массивы, подобные этим, в куче.

person Lundin    schedule 13.11.2013

Скорее всего, у вас закончилось место в стеке. Вы можете узнать размер стека в Linux, используя ulimit -s, что дает вам размер стека в КиБ. Ваш массив будет содержать 340659 элементов. Предполагая, что 4 байта на элемент дает 1362636 байтов для массива. Размер стека на моей машине

$ ulimit -s
8192   # KiB

Ваш первый пример дает 135036 КиБ. Хотя в принципе возможно изменить размер стека в соответствии с вашими потребностями, вероятно, лучше выделить память для вашего массива в куче (Области выделения памяти в C++ (стек, куча и статика)).

Способ сделать это обсуждается здесь: Malloc трехмерный массив в C?

person PhillipD    schedule 13.11.2013