如何将共享内存段固定到物理内存中

时间:2011-08-09 19:52:09

标签: shared-memory boost-interprocess

我使用boost::interprocess::managed_shared_memory在共享内存中加载数据结构。我需要将共享内存段固定到物理内存中(例如类似于映射文件的系统调用mlock)。

在linux中,我的数据结构迟早会被物理内存换掉。在我的情况下,这对于访问结构的下一个进程在换出后会产生令人生畏的成本。

有没有办法将共享内存固定到物理内存?我对任何解决方案感兴趣,即使这意味着我无法使用boost::interprocess

1 个答案:

答案 0 :(得分:0)

使用basic_managed_xsi_shared_memory(从增强版1.46开始显然可用),您可以访问基础shmid(来自get_shmid成员),这可以让您使用{{1}来控制shmid }。使用shmctl,您可以通过将shmctl命令应用于shmid来阻止共享内存页面的交换。

其他类型的锁定(您称之为“固定”),例如将内存映射文件锁定到内存中,可以通过提供从SHM_LOCK的{​​{1}}和{mapped_region获得的返回值来实现。 {1}}成员函数get_address命令。

相关问题