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メンバーから)基になるものにアクセスできます。これにより、を使用してshmidを制御できるようになりますshmctl。shmctl を使用すると、SHM_LOCKコマンドを shmid に適用することで、共有メモリ ページのスワップを防ぐことができます。

メモリにマップされたファイルをメモリにロックするなど、他のタイプのロック (「ピニング」と呼ばれます) は、 およびメンバー関数から取得した戻り値をコマンドに提供することでmapped_region実現get_addressできget_sizeますmlock

于 2012-02-17T04:20:44.653 に答える