Я хочу создать отображенный двоичный файл в память; однако я не уверен, как создать файл, который будет отображен в систему. Я несколько раз читал документацию и понимаю, что существует 2 реализации отображаемого файла, один в iostream и другом в межпроцессном.
Вы у парней есть какая-либо идея о том, как создать отображаемый файл в общую память? Я пытаюсь позволить многопоточной программе читать массив больших, двойных записанный в формате двоичного файла. Также, каково различие между отображаемым файлом в iostream и межпроцессный?
Насколько я могу судить, iostreams поместит отображаемый файл в общую память (это то, что вы хотите); однако межпроцессор помещает файл в адресное пространство другого процесса.
Вероятно, вам следует использовать iostreams, если у вас нет нескольких процессов (не потоков), которые будут каким-либо образом взаимодействовать друг с другом.
Главное различие, которое я вижу между ними, заключается в том, как они используются. В boost-interprocess , чтобы использовать отображаемый в память файл, вы создаете объекты в этом пространстве памяти, используя размещение new
, и эти объекты автоматически сохраняются в двоичной форме в вашем файле. Затем другие процессы могут сопоставить тот же файл и использовать эти объекты, или сама программа может использовать его в качестве постоянного кеша и перезагружать их позже. Файлы с отображением памяти в boost-iostreams действуют точно так же, как файловые потоки, с дополнительными преимуществами в виде boost :: iostream
и обеспечивают семантику потока для межпроцессного взаимодействия.
Для одного процесса использование файлов с отображением в память boost :: iostream
не приносит особой пользы. Однако это может уменьшить задержку при работе с файлом, поскольку он уже был загружен в память. Но вы получите это преимущество только в том случае, если вы постоянно переписываете части файла. Для одного прохода чтения / записи файла не может быть никакого ускорения.