Каково предлагаемое число байтов каждый раз для файлов, слишком больших для отображения в памяти за один раз?
Я открываю файлы, используя карту памяти. Файлы, по-видимому, слишком велики (6 ГБ на 32-разрядном ПК), чтобы их можно было сопоставить один раз назад. Поэтому я думаю о том, чтобы каждый раз отображать его часть и корректировать смещения в следующем отображении.
Есть ли оптимальное количество байтов для каждого отображения или есть способ определить такую цифру?
Благодарю.
2 ответа
Там нет оптимального размера. В случае 32-разрядного процесса всего 4 ГБ адресного пространства, и обычно для процессов пользовательского режима доступно только 2 ГБ. Затем эти 2 ГБ фрагментируются кодом и данными из exe и DLL, распределением кучи, стеками потоков и так далее. Учитывая это, вы, вероятно, не найдете более 1 ГБ непрерывного пространства для сопоставления файла в памяти.
Оптимальное количество зависит от вашего приложения, но я бы хотел, чтобы в 32-разрядный процесс было включено более 512 МБ. Даже если вы ограничите себя до 512 МБ, вы можете столкнуться с некоторыми проблемами в зависимости от вашего приложения. В качестве альтернативы, если вы можете использовать 64-битную архитектуру, проблем с отображением нескольких гигабайт файла в память не должно быть - адресное пространство настолько велико, что не должно вызывать проблем.
Вы можете использовать такой API, как VirtualQuery, чтобы найти наибольшее непрерывное пространство, но тогда вы фактически выталкиваете ошибки памяти, возникающие при удалении большого количества адресного пространства.
РЕДАКТИРОВАТЬ: я только что понял, что мой ответ специфичен для Windows, но вы не знаете, какую платформу вы обсуждаете. Я предполагаю, что другие платформы имеют аналогичные ограничивающие факторы для отображаемых в памяти файлов.
Должен ли файл отображаться в памяти?
Я отредактировал 8-гигабайтные видеофайлы на 733Mhz PIII (не приятно, но выполнимо).