mmap с / dev / zero - PullRequest
       25

mmap с / dev / zero

14 голосов
/ 14 декабря 2011

Скажем, я выделяю большую память (40 МБ) с помощью mmap, используя / dev / zero следующим образом.

fd = open("/dev/zero", O_RDWR); 
a = mmap (0, 4096e4, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FILE, fd, 0);

Что я понимаю, так это то, что ядро ​​инициализирует память до нуля, когда страницы переносятся в физическую память (я полагаю, что современные ядра Linux используют Подкачка по требованию ). Так, например, когда первая страница затрагивается и, следовательно, заносится в физическую память, ядро ​​инициализирует все свои 4096 байтов до нуля, затем при касании второй страницы делает то же самое и так далее.

Правильно ли мое понимание?

Ответы [ 2 ]

12 голосов
/ 14 декабря 2011

Да, даже больше страниц появляются только при первом прикосновении к ним.

Кстати, есть флаг MAP_ANONYMOUS, который вы можете использовать в этой ситуации, нет необходимости открывать файловый дескриптор на /dev/null.

0 голосов
/ 29 апреля 2016

И mmap / dev / zero, и ANONYMOUS не имеют резервной копии файлов, а также обнуляют содержимое. Посмотрите на следующую ссылку http://man7.org/linux/man-pages/man2/mmap.2.html

...