Что делает Mmap? - PullRequest
       5

Что делает Mmap?

10 голосов
/ 04 сентября 2010

Что делает эта строка кода?

mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);

Ответы [ 2 ]

10 голосов
/ 04 сентября 2010

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

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

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

8 голосов
/ 04 сентября 2010

man mmap поможет вам в этом.

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

Параметры:

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