【问题标题】:Efficient use of POSIX shared memory in a c++ program在 c++ 程序中有效使用 POSIX 共享内存
【发布时间】:2015-10-25 20:10:51
【问题描述】:

我在 Linux 机器上使用基于 POSIX API 的共享内存在多​​个 MPI 进程之间进行通信。我有一个可行的解决方案,但我想知道如何有效地利用共享内存空间来存储大数据。

我有一台具有 64GB 共享内存限制的机器,我可能必须将 > 64GB 的数据写入该空间,但这些都是 1-2GB 的较小块。

我想知道的是:

  • 我如何才能真正删除我的 1-2GB 块占用的内存,因为它的目的已经达到并且我不再需要这些数据了?

我正在使用 shm_unlink(),但它似乎没有清除 /dev/shm/ 中的空间

请帮忙!

【问题讨论】:

  • 在 unix 中,您可以删除文件,但它仍然存在,直到存在至少一个指向它的描述符。所以你确定所有使用 shmem 的进程都调用close
  • 是的,我想你的意思是所有进程上的 shm_unlink()(?)
  • 另外,你考虑过大页面的使用吗?将您的 GB 内存拆分为 4K 页面并管理它们需要付出很多努力。
  • >您的意思是所有进程上的 shm_unlink() 否,shm_unlink 删除名称,而不是文件,就像 inode 与文件一样。你需要关闭文件
  • 是的,我既取消链接又关闭。

标签: c++ c linux posix shared-memory


【解决方案1】:

来自http://pubs.opengroup.org/onlinepubs/009695399/functions/shm_unlink.html中的sum_unlink描述 看来内存删除实际上可能会推迟,请阅读以下内容:

如果在对象被取消链接时存在对共享内存对象的一个​​或多个引用,则应在 shm_unlink() 返回之前删除该名称,但应推迟删除内存对象内容,直到所有打开和映射到该对象的引用共享内存对象已被删除。

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2016-05-25
    • 2021-08-04
    • 1970-01-01
    • 2016-05-24
    • 2020-10-18
    相关资源
    最近更新 更多