¿Qué hace mmap?

2 minutos de lectura

¿Qué hace esta línea de código?

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

avatar de usuario de caf
c y f

Solicita un mapeo anónimo privado y escribible de n bytes de memoria.

  • Una asignación privada significa que no se comparte con otros procesos (p. ej., después de una fork() el niño y el padre tendrán asignaciones independientes);
  • Una asignación anónima significa que no está respaldada por un archivo.

En este caso, se trata esencialmente de solicitar un bloque de n bytes de memoria, tan aproximadamente equivalente a malloc(n) (aunque hay que liberarlo con munmap() en vez de free(), y estará alineado con la página). También solicita que se pueda escribir en la memoria, pero no que se pueda leer; sin embargo, la memoria que se puede escribir y la que no se puede leer generalmente no es una combinación compatible con el hardware subyacente. Cuando PROT_WRITE solo se solicita, POSIX permite que la implementación suministre memoria que también se puede leer y/o ejecutar.

  • En x86 PROT_WRITE implica PROT_READ y POSIX lo permite.

    – Iwillnotexist Idonotexist

    1 de mayo de 2019 a las 1:27

Avatar de usuario de Richard Fearn
Richard Fearn

man mmap te ayudará aquí.

Crea un mapeo de memoria en el espacio de direcciones virtuales del proceso. está creando un anónimo mapeo, que es más bien como usar malloc ubicar n bytes de memoria.

Los parámetros son:

  • NULL – el núcleo elegirá una dirección para el mapeo
  • n – longitud del mapeo (en bytes)
  • PROT_WRITE – se pueden escribir páginas
  • MAP_ANON | MAP_PRIVATE – la asignación no está respaldada por un archivo y las actualizaciones escritas en la asignación son privadas para el proceso
  • -1 – el descriptor del archivo; no se usa porque la asignación no está respaldada por un archivo
  • 0 – desplazamiento dentro del archivo en el que iniciar la asignación – de nuevo, no se usa, porque la asignación no está respaldada por un archivo

¿Ha sido útil esta solución?