Насколько большим может быть файл, отображенный в памяти?

StackOverflow https://stackoverflow.com/questions/726471

  •  05-09-2019
  •  | 
  •  

Вопрос

Что ограничивает размер файла, отображаемого в памяти?Я знаю, что он не может быть больше, чем самый большой непрерывный кусок нераспределенного адресного пространства, и что свободного дискового пространства должно быть достаточно.Но есть ли другие ограничения?

Это было полезно?

Решение

Вы слишком консервативны:Файл, отображаемый в памяти, может быть больше адресного пространства.А вид Размер отображенного в память файла ограничен ограничениями памяти ОС, но это только та часть файла, которую вы просматриваете одновременно.(И я думаю, что технически вы можете сопоставить несколько представлений отдельных частей файла одновременно, поэтому, помимо ограничений по накладным расходам и длине страницы, ограничением является только общее количество байтов, которые вы просматриваете.Вы можете посмотреть байты от [0 до 1024] и байты [240 до 240 + 1024] с двумя отдельными видами.)

В MS Windows посмотрите КартаViewOfFile функция.Фактически он принимает 64-битное смещение файла и 32-битную длину.

Другие советы

Вот мой опыт использования файлов с отображением в памяти под Win32:

Если вы сопоставляете весь файл с одним сегментом, он обычно занимает около 750 МБ, потому что не может найти более крупный смежный блок памяти.Если разделить его на более мелкие сегменты, скажем, по 100 МБ каждый, вы можете получить около 1500–1800 МБ в зависимости от того, что еще работает.

Если вы используете /3g переключатель вы можете получить от 2 ГБ до примерно 2700 МБ, но производительность ОС снижается.

Я не уверен насчет 64-битной версии, я никогда ее не пробовал, но предполагаю, что максимальный размер файла ограничивается только объемом имеющейся у вас физической памяти.

Других ограничений быть не должно.Разве этого недостаточно?;-)

Под Windows:«Размер представления файла ограничен наибольшим доступным непрерывным блоком незарезервированной виртуальной памяти.Это не более 2 ГБ минус виртуальная память, уже зарезервированная процессом."

От МДСН.

Я не уверен насчет LINUX/OSX/Whatever Else, но, вероятно, это также связано с адресным пространством.

С ПРЕДОХРАНИТЕЛЬ в Linux вы также можете создать файловую систему в памяти, которая по требованию расширяется на диск.Я не уверен, что это можно квалифицировать как отображение памяти, и различие становится размытым.

Да, существуют ограничения на файлы, отображаемые в памяти.Самое шокирующее:

Файлы, отображаемые в памяти, не могут быть больше 2 ГБ в 32-битных системах.

Когда карта памяти вызывает создание или расширение файла за пределы его текущего размера в файловой системе, содержимое новой части не указано.В системах с семантикой файловой системы POSIX расширенная часть будет заполнена нулевыми байтами.

Даже в моей 64-битной системе с 32 ГБ ОЗУ я получаю следующую ошибку, если пытаюсь прочитать один большой файл с отображением в памяти вместо того, чтобы брать его части с использованием смещений байтов:

Overflow Error: memory mapped size must be positive

С большими наборами данных действительно сложно работать.

Статья в Википедии по этому поводу:http://en.wikipedia.org/wiki/Memory-mapped_file

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top