Есть ли разница между файлом сопоставления boost iostream и файлом сопоставления boost между процессами? - PullRequest
12 голосов
/ 28 марта 2010

Я хочу создать отображенный двоичный файл в память; Однако я не уверен, как создать файл для сопоставления в системе. Я прочитал документацию несколько раз и понял, что есть 2 реализации сопоставленных файлов, одна в iostream, а другая в межпроцессном режиме.

Ребята, у вас есть идеи, как создать сопоставленный файл в общей памяти? Я пытаюсь разрешить многопоточной программе читать массив больших двойников, записанных в двоичном формате файла. Кроме того, в чем разница между отображенным файлом в iostream и межпроцессным процессом?

Ответы [ 2 ]

2 голосов
/ 28 марта 2010

Насколько я могу судить, iostreams поместит сопоставленный файл в общую память (это то, что вы хотите); однако, межпроцессный процесс помещает файл в адресное пространство другого процесса.

Вам, вероятно, следует использовать iostreams, если у вас нет нескольких процессов (не потоков), которые каким-либо образом будут взаимодействовать друг с другом.

0 голосов
/ 07 апреля 2010

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

Для одного процесса использование boost::iostream отображенных в память файлов не дает больших преимуществ. Однако это может уменьшить задержку при работе с файлом, так как он уже будет загружен в память. Но вы получаете это преимущество только в том случае, если постоянно переписываете части файла. Для одного прохода чтения / записи файла скорость может не увеличиться.

...