Каково предлагаемое число байтов каждый раз для файлов, слишком больших для отображения в памяти за один раз? - PullRequest
2 голосов
/ 23 июня 2009

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

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

Спасибо.

Ответы [ 2 ]

3 голосов
/ 23 июня 2009

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

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

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

РЕДАКТИРОВАТЬ: Я только что понял, что мой ответ зависит от Windows, но вы не знали, какую платформу вы обсуждаете. Я предполагаю, что другие платформы имеют аналогичные ограничивающие факторы для отображаемых в памяти файлов.

0 голосов
/ 23 июня 2009

Должен ли файл отображаться в памяти?

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

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