boost iostream映射文件和boost进程间映射文件之间有区别吗?

时间:2010-03-28 02:07:59

标签: c++ boost interprocess boost-interprocess boost-iostreams

我想在内存中创建一个映射的二进制文件;但是我不确定如何创建要映射到系统的文件。我多次阅读文档并意识到有2个映射文件实现,一个在iostream中,另一个在进程间。

你们对如何在共享内存中创建映射文件有任何想法吗?我试图允许多线程程序读取以二进制文件格式写入的大型double数组。 iostream中的映射文件和进程间的区别是什么?

2 个答案:

答案 0 :(得分:2)

据我所知,iostream会将映射文件放在共享内存中(这就是你想要的);但是,进程间会将文件放在另一个进程的地址空间中。

你应该使用iostreams,除非你有多个进程(而不是线程)以某种方式相互通信。

答案 1 :(得分:0)

我看到两者之间的主要区别在于如何使用它们。在boost-interprocess中,要使用内存映射文件,可以使用placement new在该内存空间中创建对象,并且这些对象在文件中以二进制形式自动持久化。然后,其他进程可以映射相同的文件并使用这些对象,或者程序本身可以将其用作持久性缓存并在以后重新加载它们。 boost-iostreams中的内存映射文件就像文件流一样,具有boost::iostream的额外好处,并且可以为进程间通信提供流语义。

对于单个进程,使用boost::iostream内存映射文件没有太大好处。但是,它可以减少使用文件的延迟,因为它已经被加载到内存中。但是,如果您不断重写文件的某些部分,那么您只能获得此项好处。对于文件的单个读/写传递,可能没有任何加速。