Digamos que asigno una memoria grande (40MB) con mmap usando/dev/zero de la siguiente manera.mmap con/dev/zero
fd = open("/dev/zero", O_RDWR);
a = mmap (0, 4096e4, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FILE, fd, 0);
Lo que entiendo es que el kernel se inicializará recuerdos a cero a medida que las páginas se ponen en la memoria física (supongo que los modernos núcleos de Linux utilizan paginación demanda). Entonces, por ejemplo, cuando se toca la primera página y, por lo tanto, se lleva a la memoria física, el kernel inicializará todos sus 4096 bytes a cero, y luego cuando se toque la segunda página, hará lo mismo, y así sucesivamente.
¿Es correcto mi entendimiento?
Respuesta corta: Sí – hirschhornsalz
Siempre que toque significa escribir, sí. De lo contrario, si acaba de leer de una página cero, en realidad hay una sola página cero, que será COW'ed en la primera escritura. – ninjalj
Esto fallará mucho en Android 5.0, porque SELinux bloqueará tales rarezas. Es por eso que Inkscape en chroot no se inicia en Android. – pelya