2010-03-28 2 views
12

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

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

ответ

2

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

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

+0

Спасибо за разъяснение Джо, я попробую iostream. – Yijinsei

+2

@ Joe D: это не то впечатление, которое я получаю от библиотеки interprocess. В частности, из документации: «система создает сопоставление файлов для связывания файла и адресного пространства процесса». Для нескольких процессов он по существу разделяет память с резервной копией файловой системы. – rcollyer

+0

Да, но библиотека interprocess не создает резервную копию файловой системы, она просто сопоставляет файл в межпроцессной общей памяти. Однако iostreams отобразит его в памяти для одного процесса. Который, вероятно, (я не проверял реализацию) более эффективен. –

0

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

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