Самый большой массив int, который может обработать компьютер? - PullRequest
0 голосов
/ 16 мая 2010

Мне нужно создать максимально большой массив на моем 32-битном компьютере с Linux. Какой самый большой размер массива мой компьютер может обрабатывать? Это 2 ^ 32?

Ответы [ 3 ]

3 голосов
/ 16 мая 2010

Я предполагаю, что это будет где-то где-то 2 ^ 31 и 2 ^ 32, не больше, возможно, даже меньше (часть адресного пространства будет занята библиотеками и кодом приложения). Один процесс не может получить доступ к более чем 2 ^ 32 памяти, а некоторые ОС выделяют половину адресного пространства для специальных целей. Не уверен, что Linux делает это или нет.

Размер указателя составляет 32 бита, поэтому вы не можете получить линейный кусок памяти больше, чем 2 ^ 32, независимо от того, что вы делаете. Все, что не является «линейным фрагментом памяти», нельзя назвать массивом.

2 голосов
/ 16 мая 2010

Кроме того, если мы предположим, что эта цифра составляет около 3 ГБ (что кажется разумным), то вы также должны помнить, что целые числа составляют 4 байта каждое: максимум 3G / 4 = около 750 миллионов целых чисел .

И, конечно же, есть тот факт, что если вы выделите массив размером 3 ГБ, у вас не останется никакого адресного пространства для чего-либо еще!

Моя личная рекомендация: если вы планируете работать с большими массивами чисел, использовать отображенные в памяти файлы (в Linux это делается с mmap ) и отображать только небольшой участок файл в память за раз (скажем, 100 МБ). Это будет означать, что вы можете обрабатывать любой набор данных размером , который вам нравится, и , вы не исчерпаете свое адресное пространство.

0 голосов
/ 16 мая 2010

Есть ли ограничение максимальной длины массива в C ++?

Есть 2 ограничения, физическая память, но, игнорируя это, она должна быть (2 ^ 32) -1, учитывая, что больше ничего не происходит, как и вы ограничены физической памятью ваша программа ограничена тем, что разрешено принимать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...