Чем так хорош способ мэппирования файлов против обычного? Я сначала начал его использовать. Но потом не нашёл реальной выгоды. Особенно, когда выделяешь смещение от начала файла. Приходится выравнивать. Говорят по .dwPageSize надо. А WinXP не хочет, говорит ошибка выравнивания. А кроме того, часть файла загружается зря.
Конкретный пример - сортировка файла. Полюбоому лучше мапить. Другой вариант - проигрывание звука, весь файл в буфер грузится долго и каждый раз читать не получается, тогда легче копировать из образа кусками.
Просто его MapViewOfFile - это обёртка вокруг VirtualAlloc SetFilePointer ReadFile Только отдельно они гибче - не надо выравнивать смещение в файле по размеру страниц в памяти. Только в XP он не стал брать выравнивание по 4Кб. Но sysinfo возвращает именно такое значение, а в SDK рекомендуют именно его. Я-то ладно, не гордый. Сам догадаюсь, что можно хард-кодить 64Кб и голову не морочить. Но где гарантия, что в будущем не будет выравнивания, скажем, по 1Мб?
Я, конечно, чукча, но мне кажется, что на уровне, приближенном к ядру, чтение реализуется путём маппинга и копирования из замапенного...
SolidCode > Странно, у меня это обёртка вокруг других ф-ций: MapViewOfFile -> NtMapViewOfSection -> MmMapViewOfSection ... это основное приимущество: можно замапить большой файл, но "физически" данные окажутся в памяти только при обращении к ним.
S_T_A_S_ Нет, я образно выражался, что данный набор функций делает то же самое. Ты хочешь сказать, что можно весь фильм (700Мб) а то и 10Гб замапить полностью, а загрузка будет лишь при обращении к выделенному указателю? Я читал, что размер выделяемого куска ограничен размером свопа. А тот более 2Гб не бывает.
SolidCode можно весь фильм (700Мб) ... замапить полностью w2k+ - без проблем. w9x имеет особенности. Читай о них у Рихтера в 13 и 17 главах. 10Гб замапить полностью Теоретически, судя по документации, максимальный размер куска для w32 составляет (2^32)-1, а для w64 - (2^64)-1. Я читал, что размер выделяемого куска ограничен размером свопа. А тот более 2Гб не бывает. Причем тут своп? Ссылку пожалуйста.