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

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

  •  06-07-2019
  •  | 
  •  

Вопрос

Я открываю файлы, используя карту памяти.Файлы, по-видимому, слишком большие (6 ГБ на 32-разрядном ПК), чтобы их можно было отобразить за один раз.Поэтому я подумываю о том, чтобы каждый раз отображать его часть и корректировать смещения в следующем отображении.

Существует ли оптимальное количество байтов для каждого сопоставления или есть способ определить такую цифру?

Спасибо.

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

Решение

Оптимального размера не существует.При 32-разрядном процессе общее адресное пространство составляет всего 4 ГБ, и обычно для процессов пользовательского режима доступно только 2 ГБ.Эти 2 ГБ затем фрагментируются кодом и данными из exe и DLL, распределениями кучи, стеками потоков и так далее.Учитывая это, вы, вероятно, не найдете более 1 ГБ непрерывного пространства для отображения файла в память.

Оптимальное количество зависит от вашего приложения, но я был бы обеспокоен отображением более 512 МБ в 32-разрядный процесс.Даже ограничившись 512 МБ, вы можете столкнуться с некоторыми проблемами в зависимости от вашего приложения.В качестве альтернативы, если вы можете перейти на 64-разрядную версию, не должно возникнуть проблем с отображением нескольких гигабайт файла в память - ваше адресное пространство настолько велико, что это не должно вызывать никаких проблем.

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

Редактировать:Я только что понял, что мой ответ специфичен для Windows, но вы не указали, какую платформу обсуждаете.Я предполагаю, что другие платформы имеют аналогичные ограничивающие факторы для файлов, отображенных в памяти.

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

Нужно ли сопоставлять файл с памятью?

Я отредактировал видеофайлы объемом 8 гб на 733 МГц PIII (неприятно, но выполнимо).

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