Я пытаюсь создать большой файл с отображением памяти с данными, которые я хочу использовать в проекте. Я использую библиотеку Boost для сопоставленных файлов, и все работает нормально, пока я не попытаюсь создать большой файл (> 2 ГБ). Мой компьютер имеет только 3 ГБ ОЗУ, а во время создания файла он зависает. Есть ли способ создать файл с использованием небольших фрагментов данных и избежать замораживания процесса?C++: Создание большого файла с отображением памяти, зависающего pc
char p[20] = "test.raw";
boost::iostreams::mapped_file_params params;
params.path = "test.raw";
params.new_file_size = sizeof(struct Rectangle) * data_size;
params.mode = std::ios_base::out;
boost::iostreams::mapped_file file;
file.open(params);
struct Rectangle* dataMAP = (struct Rectangle*) file.data();
for(unsigned long long i=0; i<data_size; i++){
dataMAP[i] = struct Rectangle(rand_float_array);
}
Я запускаю программу в 64-битном режиме и включил/LARGEADRESSAWARE.
UPDATE
В настоящее время я пытаюсь запустить небольшой пример с использованием библиотеки «Повысьте межпроцессный», но я не могу заставить его работать. Это мой код, основанный на this ответ:
std::string vecFile = "vector.dat";
bi::managed_mapped_file file_vec(bi::open_or_create,vecFile.c_str(), sizeof(struct Rectangle) * data_size);
typedef bi::allocator<struct Rectangle, bi::managed_mapped_file::segment_manager> rect_alloc;
typedef std::vector<struct Rectangle, rect_alloc> MyVec;
MyVec * vecptr = file_vec.find_or_construct<MyVec>("myvector")(file_vec.get_segment_manager());
vecptr->push_back(random_rectangle);
Но компилятор говорит, что он не может вывести аргумент шаблона для «_Ty *» от «повышающего :: межпроцессного :: offset_ptr». Что я делаю не так?
Что происходит, если вы пытаетесь создать файлы с отображением памяти, которые меньше? Как насчет 1/2 ГБ или 2 ГБ? –
Все работает нормально. Я пробовал 0,5 ГБ, и проблем не было. Что-то еще я заметил, что использование памяти было около 1 МБ, а затем внезапно все остановилось. – TheShadow
Итак, если вы создаете четыре файла объемом 0,5 ГБ, он отлично работает? –