|
|
А теперь о накладных расходах: для того, чтобы отобразить файл в память нужно построить карту, в которой будет отмечено, какой фрагмент присутствует в физ. памяти, а какой нет, был ли блок изменен и т.п. Это тоже требует выделения памяти. Кроме того, расходуется адресное пространство, которого в 32-битной системе 4Гб, из которыз для нужд memory mapping'а доступно 1-2Гб. (в 64-битной такой проблемы условно нет, т.к. нет таких объемов данных). Получается, что для того, чтобы открыть файл обычным способом (с вкл. кешированием) или отобразить его в память нужно иметь достаточное к-во памяти для служебных нужд и достаточное незанятое непрерывное адресное пространство. Для относительно небольших файлов проблем нет. А когда речь заходит о сотнях мегабайт и гигабайтах - знакомые утилиты вдруг перестают работать.
|