Ответ 1
Да, еще больше страниц появляются только в том случае, если вы впервые прикоснетесь к ним.
Кстати, есть флаг MAP_ANONYMOUS
, который вы можете использовать в этой ситуации, нет необходимости открывать дескриптор файла на /dev/null
.
Скажем, я выделяю большую память (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 используют подкачку Demand). Например, когда первая страница затрагивается и, следовательно, попадает в физическую память, ядро будет инициализировать все свои 4096 байт до нуля, а затем, когда вторая страница будет затронута, она сделает то же самое и так далее.
Правильно ли я понимаю?
Да, еще больше страниц появляются только в том случае, если вы впервые прикоснетесь к ним.
Кстати, есть флаг MAP_ANONYMOUS
, который вы можете использовать в этой ситуации, нет необходимости открывать дескриптор файла на /dev/null
.
Оба mmap/dev/zero и ANONYMOUS не имеют файла, а также обнуленного содержимого. Посмотрите на следующую ссылку http://man7.org/linux/man-pages/man2/mmap.2.html