我想在内存中创建一个映射的二进制文件;但是我不确定如何创建要映射到系统的文件。我多次阅读文档并意识到有 2 个映射文件实现,一个在 iostream 中,另一个在进程间。
你们对如何将映射文件创建到共享内存有任何想法吗?我试图让多线程程序读取以二进制文件格式编写的大型双精度数组。另外 iostream 和进程间映射文件有什么区别?
我想在内存中创建一个映射的二进制文件;但是我不确定如何创建要映射到系统的文件。我多次阅读文档并意识到有 2 个映射文件实现,一个在 iostream 中,另一个在进程间。
你们对如何将映射文件创建到共享内存有任何想法吗?我试图让多线程程序读取以二进制文件格式编写的大型双精度数组。另外 iostream 和进程间映射文件有什么区别?
据我所知,iostreams 会将映射文件放在共享内存中(这就是你想要的);然而,interprocess 将文件放在另一个进程的地址空间中。
您可能应该使用 iostreams,除非您有多个进程(而不是线程)将以某种方式相互通信。
我看到两者之间的主要区别是它们的使用方式。在boost-interprocess中,要使用内存映射文件,您可以使用 placement 在该内存空间中创建对象new
,并且这些对象会自动以二进制形式保存在您的文件中。然后其他进程可以映射同一个文件并使用这些对象,或者程序本身可以将其用作持久缓存并稍后重新加载它们。boost-iostreams中的内存映射文件的行为就像文件流一样,具有作为 的额外好处boost::iostream
,并且将为进程间通信提供流语义。
boost::iostream
对于单个进程,使用内存映射文件没有太多好处。但是,它可以减少处理文件的延迟,因为它已经被加载到内存中。但是,只有在不断地重写文件的某些部分时,您才能获得这种好处。对于文件的单个读/写通道,可能没有任何加速。