代码之家  ›  专栏  ›  技术社区  ›  Yijinsei

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

  •  12
  • Yijinsei  · 技术社区  · 16 年前

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

    2 回复  |  直到 16 年前
        1
  •  2
  •   Jonathan Leffler    16 年前

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

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

        2
  •  0
  •   rcollyer    16 年前

    我认为两者的主要区别在于它们的使用方式。在 boost-interprocess ,若要使用内存映射文件,请使用placement在该内存空间中创建对象 new ,并且这些对象在文件中自动以二进制形式持久化。然后,其他进程可以映射同一个文件并使用这些对象,或者程序本身可以将其用作持久缓存并在以后重新加载它们。内存映射文件 boost-iostreams 就像文件流一样,作为一个 boost::iostream

    对于单个进程,使用 boost::iostream 内存映射文件。但是,它可以减少处理文件的延迟,因为文件已经加载到内存中。但是,只有不断重写文件的一部分,才能获得这种好处。对于文件的单个读/写过程,可能没有任何速度提升。