Я написал класс C ++ для Windows и Linux, который создает представление с отображением в памяти для файла произвольного размера n. Код для конструктора класса можно увидеть здесь . В настоящее время я тестирую код на Windows 32 бит XP.
Я обнаружил, что для размеров файлов 0 = 2 ГБ MapViewOfFile возвращает значение NULL и код ошибки 8: «Недостаточно памяти для обработки этой команды». Очевидно, Windows не может найти доступное адресное пространство размером 2 ГБ в процессе.
Следовательно, мне может понадобиться изменить конструктор класса, чтобы создать набор меньших отображаемых в память представлений общим объемом> = 2 ГБ байт && <2 ^ 32 - 1 байт. Другое требование состоит в том, чтобы создать сопоставление между каждым из меньших отображенных в память представлений и произвольно доступным адресом в адресном пространстве процесса. </p>
Ранее я использовал следующий код для произвольного доступа:
char* KeyArray;
try {
mmapFile = new cMemoryMappedFile(n);
}
catch (cException e)
{
throw;
}
KeyArray = (char *)(mmapFile->GetPointer());
KeyArray[i] = ...
Как мне изменить класс для удовлетворения этих требований?