Как закрепить сегмент общей памяти в физической памяти - PullRequest
2 голосов
/ 09 августа 2011

Я использую boost::interprocess::managed_shared_memory для загрузки структуры данных в разделяемой памяти. Мне нужно закрепить сегмент разделяемой памяти в физической памяти (например, аналогично системному вызову mlock для сопоставленных файлов).

В linux рано или поздно моя структура данных выгружается из физической памяти. В моем случае это приводит к чрезмерной стоимости следующего процесса, обращающегося к структуре, после его замены.

Есть ли способ закрепить разделяемую память в физической памяти? Меня интересует любое решение, даже если оно означает, что я не могу использовать boost::interprocess.

1 Ответ

0 голосов
/ 17 февраля 2012

Используя basic_managed_xsi_shared_memory (очевидно, доступен с буста 1.46), вы можете получить доступ к базовому shmid (от члена get_shmid), который должен позволять вам управлять shmid с помощью shmctl.С помощью shmctl вы можете предотвратить обмен страницами с общей памятью, применив команду SHM_LOCK к shmid.

Другие типы блокировок (которые вы называете «закреплением»), такие как блокировка отображаемых в память файловпамяти, может быть реализовано путем подачи возвращаемых значений, полученных из mapped_region * get_address и get_size функций-членов, в команду mlock.

...