我使用boost::interprocess::managed_shared_memory
在共享内存中加载数据结构。我需要将共享内存段固定到物理内存中(例如类似于映射文件的系统调用mlock)。
在linux中,我的数据结构迟早会被物理内存换掉。在我的情况下,这对于访问结构的下一个进程在换出后会产生令人生畏的成本。
有没有办法将共享内存固定到物理内存?我对任何解决方案感兴趣,即使这意味着我无法使用boost::interprocess
。
答案 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
命令。