【问题标题】:How to change the path of shared memory created using boost library in c++如何更改在 C++ 中使用 boost 库创建的共享内存的路径
【发布时间】:2019-09-16 09:03:08
【问题描述】:

我正在尝试创建共享内存。 但我无法在我当前的项目位置创建它。而是在默认位置创建共享内存,即 /dev/shm

代码:

    boost::shared_ptr<bip::managed_shared_memory> segment_Order;
    segment_Order = boost::make_shared<bip::managed_shared_memory(bip::open_or_create, "MyShm", 10 * 1024);

请建议我如何将共享内存创建从默认位置更改为我配置的位置。

【问题讨论】:

  • 不清楚“在我当前的项目位置”是什么意思。 共享​​>内存的全部意义在于内存在进程之间共享​​>。请详细说明您打算实现的目标以及原因。
  • /dev/shm/ 是共享内存所在的位置。在当前项目位置分配它没有意义,因为其他应用程序可能无法访问该位置,这违背了它作为共享内存的目的。
  • 共享内存在重新启动后在 /dev/shm 中创建时被删除,这是我不想要的。我想在重新启动后重用该共享内存。这就是为什么我想将位置从 /dev/shm 更改为本地目录。
  • 难道您要查找的不是共享内存(确实,自然不会在重启后持续存在),而是一个文件 (可能有额外的访问同步)?
  • @HimanshuSharma:所有内存,无论是否共享,重启后都会消失。如果您希望数据在重新启动后保留,它必须转到持久存储(文件、数据库等)

标签: c++ boost shared-memory


【解决方案1】:

在 Linux 上,managed_shared_memory 使用 shm_open

Linux 上的 POSIX 共享内存对象实现使用了专用的 tmpfs(5) 文件系统,该文件系统通常安装在 /dev/shm 下。

如果您想在不同的位置创建一个共享内存文件,您可能想使用一个普通的映射文件managed_mapped_file。详情请见Managed Mapped File

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-07
    • 2012-02-04
    • 2013-06-11
    • 2015-11-16
    • 2014-07-26
    相关资源
    最近更新 更多