Подтвердить что ты не робот

Есть ли разница между форсированным файлом iostream и файлом перекрестного сопоставления boost?

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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