2011-08-09 102 views
1

我使用boost::interprocess::managed_shared_memory將數據結構加載到共享內存中。我需要將共享內存段固定到物理內存中(例如,類似於映射文件的系統調用mlock)。如何將共享內存段固定到物理內存中

在Linux中,我的數據結構遲早會被換出物理內存。在我的情況下,在下一個訪問結構的進程被換出之後,這會產生一個可怕的成本。

有沒有辦法將共享內存固定到物理內存中?我對任何解決方案感興趣,即使這意味着我不能使用boost::interprocess

+0

暫時我使用swapoff命令來禁用交換分區以完成此操作。這個解決方案當然不是很理想...... – kounoupis

+0

這個運氣好嗎?我也對此感興趣。 – xeon

回答

0

使用basic_managed_xsi_shared_memory(因爲升壓1.46顯然可用),您可以訪問底層shmid(從get_shmid成員)應允許您控制使用shmctl的的shmid。使用shmctl,您可以通過將SHM_LOCK命令應用於shmid來防止共享內存頁面的交換。

其他類型的鎖定的(你稱之爲「釘扎」),諸如鎖定存儲器映射文件到存儲器中,可以通過提供從mapped_regionget_addressget_size成員函數到mlock命令獲得的返回值來實現。