#cpp #массивы #хранение_данных
Есть большой файл с двумерным массивом. Весь массив целиком загружать в память, я
думаю, не стоит (ну очень большой массив). Периодически нужны кусочки данных из разных
частей массива. Как это лучше организовать?
Есть вариант держать fstream все время открытым и выбирать данные используя seekg().
Будет ли в таком случае весь файл загружен в память?
Ответы
Ответ 1
Файл нужно отобразить на оперативную память (mmap в unix, CreateFileMapping в Windows). Тогда при обращении к нему, ОС будет сама подтягивать с диска нужные куски (причем самым оптимальным образом). В том случае, если физической памяти будет недоставать, ОС выбросит эти страницы из нее (что не займет практически никакого времени), и не будет их долго и мучительно сливать в файл подкачки.Ответ 2
Будет ли в таком случае весь файл загружен в память? Нет, не будет. Если бы открытие файла с помощью std::fstream требовало загрузки всего содержимого файла в память, то большие файлы открывались бы ну очень долго, а это не так. Поэтому предложенную Вами идею вполне можно использовать для реализации.
Комментариев нет:
Отправить комментарий