Я использую приведенный ниже код для открытия файлов размером примерно от 400 до 800 МБ:
#include <boost\interprocess\file_mapping.hpp>
#include <boost\interprocess\mapped_region.hpp>
#include <iostream>
#include <vector>
#include <string>
using namespace boost::interprocess;
using namespace std;
int main(){
file_mapping fm("C:\\test\\1.txt",read_only);
mapped_region region(fm,read_only);
const char* const data = static_cast<const char*>(region.get_address());
const size_t max_size = region.get_size();
cout << max_size;
int b;
cin >> b;
}
Если я укажу приведенный выше код на небольшой файл, я не получу исключения. Однако при просмотре файлов размером в несколько сотен МБ (по внешнему USB) я получаю исключение:
Необработанное исключение в 0x7521C41F в ReadingFiles.exe: Microsoft
C ++ исключение: boost :: interprocess :: interprocess_exception в памяти
местоположение 0x0040FBD4.
У меня 2,4 ГБ ОЗУ свободно, так что не должно быть, что у меня закончилась память?
Если ваша программа скомпилирована как 32-битная, вам, скорее всего, не хватает памяти. Вроде, как бы, что-то вроде. 2,4 ГБ свободной не обязательно означает 2,4 ГБ свободной непрерывной памяти. Возможно, вы не сможете получить достаточно большой кусок для сопоставления вашего файла.
Других решений пока нет …