2

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

在 linux 中,我的数据结构迟早会从物理内存中换出。在我的情况下,这会为下一个访问该结构的进程带来高昂的成本,在它被换​​出之后。

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

4

1 回答 1

0

使用basic_managed_xsi_shared_memory(显然自 boost 1.46 起可用),您可以访问底层shmid(从get_shmid成员),这应该允许您使用shmctl. 使用 shmctl,您可以通过将SHM_LOCK命令应用于 shmid 来防止共享内存页面的交换。

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

于 2012-02-17T04:20:44.653 回答