Обычно вам не нужно беспокоиться об ограничениях для 64-битных mmap
, но я объясню почему.
Во-первых, 32-разрядные платформы теоретически могут поддерживать до 2**32
или 4 ГБ. Но ОС резервирует часть этого для себя. В Windows этот фрагмент по умолчанию составляет целых 2 ГБ (вы можете настроить его меньше, но некоторые программы могут сломаться, поскольку предполагается, что использование «подписанных указателей» безопасно), в то время как на других платформах он обычно больше похож на 512 МБ.
Точно так же 64-битные платформы теоретически могут поддерживать до 2**64
или 16EB. Здесь то, резервирует ли ОС 512 МБ или 2 ГБ, не окажет существенного влияния.
Тем не менее, ваше аппаратное обеспечение может ограничивать размер где-то между 44 и 56 битами (большинство современных систем являются 48-битными), а 44 бита составляют всего 256 ТБ.
И ваша ОС может ограничивать возможности еще больше. IIRC, самые ранние 64-битные ядра Linux использовали только 40 бит (потому что в то время не было оборудования, которое могло бы использовать больше), что составляет всего 1 ТБ.
Наконец, в Windows, если вы используете «базовую» или «стартовую» версию, это может ограничить еще больше до 8 ГБ для Windows 8 Home Basic Edition. Это единственное, что может повлиять на ваш файл.
Но, в отличие от более поздних 32-битных версий, почти ни у кого в 2018 году физической памяти больше, чем их ОС может выгружать за раз. Многие люди используют 32-битную Windows (или 32-битный Python на 64-битной Windows) на машинах с более чем 4 ГБ ОЗУ, но почти невозможно загрузить 64-битную систему с 40-битной ОС. с оперативной памятью более 1 ТБ.
Таким образом, сколько бы у вас ни было оперативной памяти, вы сможете использовать большую ее часть для mmap
.
Иногда вы хотите mmap
файл, который на самом деле не помещается в вашей оперативной памяти. Тогда вы будете полагаться на подкачку страниц ОС, которая, конечно, будет менее эффективной, чем работа с меньшими картами файла, но может быть достаточно эффективной и может быть намного проще.
В этом случае он вероятно будет работать в вашей системе, но на самом деле невозможно сказать наверняка, не зная намного больше того, что вы нам рассказали. И самый простой ответ (как обычно для Python) — EAFP: попробуйте и подготовьтесь к обработке исключения в случае сбоя (либо программно, либо просто прочитав трассировку стека и выполнив поиск решения в StackOverflow).
person
abarnert
schedule
10.04.2018