2010-09-04 25 views
6
mmap(NULL, n, PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); 

hola ... Estoy tratando de averiguar el significado del código anterior ...?¿Qué hace mmap?

+1

O 'man 2 mmap'. –

Respuesta

5

man mmap te ayudarán aquí.

Crea una asignación de memoria en el espacio de direcciones virtuales del proceso. Se está creando una asignación anónima, que es más bien como usar malloc para asignar n bytes de memoria.

Los parámetros son:

  • NULL - el núcleo elegirá una dirección para el mapeo
  • n - longitud de la asignación (en bytes)
  • PROT_WRITE - páginas pueden ser escritos
  • 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 de archivo; no se utiliza debido a que la asignación no está respaldado por un archivo
  • 0 - desplazamiento dentro del archivo en el que se inicia el mapeo - de nuevo, no se utiliza, ya que la asignación no está respaldado por un archivo
6

Se solicita una mapeo anónimo privado, escribible de n bytes de memoria.

  • Un mapeo privada significa que no se comparte con otros procesos (por ejemplo, después de un 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 está solicitando esencialmente un bloque de n bytes de memoria, por lo menos equivalente a malloc(n) (aunque debe ser liberado con munmap() en lugar de free()). También solicita que la memoria sea escribible pero no legible, pero dicha solicitud generalmente no es compatible con el hardware subyacente.