Как мне отобразить область _particular_ в памяти? - PullRequest
3 голосов
/ 17 января 2010

У меня есть программа. Я хочу, чтобы он мог отображать определенную область памяти на разных запусках.

  1. У меня есть исходный код программы. C / C ++
  2. Я контролирую, как программа компилируется. НКУ
  3. Я контролирую, как программа связана. НКУ
  4. Я контролирую, как работает программа (Linux).

Я просто хочу иметь конкретную область памяти, скажем, от 0xabcdabcd до 0xdeadbeef, которую я отображаю в конкретный файл. Есть ли способ гарантировать это? (Я должен как-то убедиться, что другие вещи не загружены в этот конкретный регион).

EDIT:

Как мне сделать так, чтобы был уверен, что ничто иное не занимает этот конкретный регион в памяти?

Ответы [ 3 ]

7 голосов
/ 17 января 2010

Вам нужно сделать две вещи:

  1. Укажите начальный адрес в качестве первого аргумента mmap.
  2. Включите флаг MAP_FIXED.

Для начального адреса необходимо убедиться, что он кратен размеру страницы. Чтобы получить размер страницы, используйте вызов sysconf(_SC_PAGESIZE) (это соответствующий вызов в Linux, другие платформы могут отличаться).

1 голос
/ 17 января 2010

Передайте адрес на карту в addr. Попробуйте получить его на границе 8 КБ. Вместо этого вы можете попробовать mlock().

0 голосов
/ 17 января 2010

Вы не можете быть уверены, что ничто другое не занимает эту область памяти - первым пришел, первым обслужен. Однако, поскольку вам нужна определенная часть памяти, я предполагаю, что у вас довольно специализированная среда, поэтому вам просто нужно убедиться, что вы первый (используя стартовые скрипты)

...