2010-09-04 1 views

ответ

5

man mmap поможет вам здесь.

Он создает отображение памяти в виртуальном адресном пространстве процесса. Это создает анонимное сопоставление, что довольно похоже на использование malloc для выделения n байт памяти.

Параметры:

  • NULL - ядро ​​будет выбрать адрес для отображения
  • n - длина отображения (в байтах)
  • PROT_WRITE - страницы могут быть написаны
  • MAP_ANON | MAP_PRIVATE - сопоставление не поддерживается файлом, а обновления, записанные для сопоставления, являются приватными для процесса
  • -1 - дескриптор файла; не используется, потому что отображение не поддерживается файлом
  • 0 - смещение в файле, с которого начинается отображение - опять же, не используется, потому что отображение не поддерживается файлом
6

Он запрашивает приватное, записываемое анонимное отображение n байт памяти.

  • Частное отображение означает, что он не используется совместно с другими процессами (например, после fork() ребенка и родителя будут иметь независимые отображения);
  • Анонимное отображение означает, что оно не подкреплено файлом.

В этом случае, по существу, запрашивает блок n байт памяти, так что примерно эквивалентно malloc(n) (хотя он должен быть освобожден с munmap(), а не free()). Он также запрашивает, чтобы память записывалась, но не читалась, но такой запрос обычно не поддерживается базовым оборудованием.

Смежные вопросы