Скажем, я выделяю большую память (40 МБ) с помощью mmap с использованием/dev/zero следующим образом.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 байт до нуля, а затем, когда вторая страница будет затронута, она сделает то же самое и так далее.
Правильно ли я понимаю?
Короткий ответ: Да – hirschhornsalz
До тех пор, пока касание означает запись, да. В противном случае, если вы просто читаете с нулевой страницы, на самом деле есть одна нулевая страница, которая будет называться COW'ed при первой записи. – ninjalj
Это не удастся на Android 5.0, потому что SELinux заблокирует такую странность. Вот почему Inkscape в chroot не запускается на Android. – pelya