我想创建一个映射到内存的二进制文件,但是我不确定如何创建要映射到系统中的文件。我已经多次阅读了文档,并意识到有两个映射文件实现,一个在iostream中,另一个在interprocess中。
你们有任何关于如何在共享内存中创建映射文件的想法吗?我正在尝试让多线程程序读取以二进制文件格式编写的大double数组。而iostream和interprocess中的映射文件有什么区别呢?
我想创建一个映射到内存的二进制文件,但是我不确定如何创建要映射到系统中的文件。我已经多次阅读了文档,并意识到有两个映射文件实现,一个在iostream中,另一个在interprocess中。
你们有任何关于如何在共享内存中创建映射文件的想法吗?我正在尝试让多线程程序读取以二进制文件格式编写的大double数组。而iostream和interprocess中的映射文件有什么区别呢?
我认为两者之间的主要区别在于它们的使用方式。在boost-interprocess中,要使用内存映射文件,您需要使用放置new
在该内存空间中创建对象,并且这些对象以二进制形式自动持久化到文件中。然后,其他进程可以映射同一文件并使用这些对象,或者程序本身可以将其用作持久性缓存并稍后重新加载它们。在boost-iostreams中的内存映射文件就像文件流一样运作,具有成为boost::iostream
的附加优势,并为进程间通信提供流语义。
对于单个进程,使用boost::iostream
内存映射文件没有太多好处。但是,它可以减少处理文件时的延迟,因为它已经被加载到内存中。但是,只有在不断重写文件的部分时才能获得此优势。对于单个读/写文件的操作,可能不会有任何加速。