Cinco: asignación de memoria de espacio de usuario

Tabla de contenido

Asignación de memoria de espacio de usuario

Mapa mm

malloc


Asignación de memoria de espacio de usuario

Mapa mm

Asigne el espacio del kernel directamente al espacio del usuario, guardando la copia de la memoria del kernel en el espacio del usuario.

Desventajas de mmap

  1. Cuando se usa mmap, se debe especificar el tamaño del mapa de memoria, por lo que mmap no es adecuado para archivos de longitud variable;
  2. Si mmap tiene muchas operaciones para actualizar archivos, la ventaja de mmap para evitar la copia de dos estados se amortizará. Al final, aún recae en una gran cantidad de reescrituras de páginas sucias y la E/S aleatoria causada por esto. Por lo tanto, en el caso de una gran cantidad de escritura aleatoria, el método mmap puede no ser necesariamente más rápido que la escritura ordinaria con un búfer en términos de eficiencia;
  3. Para leer/escribir archivos pequeños (por ejemplo, archivos de menos de 16 K), mmap tiene una sobrecarga y una demora más altas en comparación con la llamada al sistema de lectura; al mismo tiempo, el vaciado de mmap está totalmente controlado por el sistema, pero en el caso de volúmenes de datos pequeños, es mejor controlarlo manualmente por la propia aplicación;
  4. mmap está limitado por el tamaño de la memoria del sistema operativo: por ejemplo, en un sistema operativo de 32 bits, el tamaño total de la memoria virtual es de solo 2 GB, pero como mmap debe encontrar un bloque de direcciones continuo en la memoria, no puede mmmap completamente un archivo de 4 GB en este momento. En este caso, debe ejecutar mmap en varios bloques, pero en este momento la dirección de la memoria de direcciones ya no es continua, el significado de usar mmap se reduce considerablemente y se introduce una complejidad adicional;

Por lo tanto, los escenarios aplicables de mmap son realmente muy limitados. Puede optar por utilizar el mecanismo de mmap en las siguientes situaciones:

Bajo el mecanismo mmap, varios subprocesos comparten el mismo espacio de memoria física. Por lo tanto, mmap es más adecuado para la comunicación de subprocesos múltiples y la memoria compartida.

malloc

  • Método 1: asignar memoria del montón a través de la llamada al sistema brk()
  • Método 2: asigne memoria en el área de mapeo de archivos a través de la llamada al sistema mmap();

Un umbral se define por defecto en el código fuente malloc():

  • Si la memoria asignada por el usuario es inferior a 128 KB, solicite memoria a través de brk();
  • Si la memoria asignada por el usuario es mayor a 128 KB, solicite memoria a través de mmap();

Cuando malloc() asigna memoria, no asigna honestamente el tamaño del espacio de memoria de acuerdo con la cantidad de bytes solicitados por el usuario, sino que asigna previamente un espacio más grande como grupo de memoria . Por ejemplo, malloc(1) asigna 1 byte de espacio, pero en realidad asigna un espacio mayor como grupo de memoria. El grupo de memoria asigna previamente una determinada cantidad de memoria cuando se inicializa el programa, almacena los bloques de memoria asignados en el grupo de memoria y los obtiene directamente del grupo de memoria cuando es necesario, sin solicitar al sistema operativo que asigne memoria, lo que evita llamadas frecuentes al sistema y mejora la eficiencia. Cuando esté libre, vuelva a colocarlo en el grupo de memoria y tómelo directamente del grupo de memoria cuando sea necesario.

En cuanto a la pregunta de " la memoria solicitada por malloc, ¿se devolverá al sistema operativo la memoria liberada por free? ", podemos hacer un resumen:

  • La memoria solicitada por malloc a través del método brk() , cuando libera la memoria, no devuelve la memoria al sistema operativo, sino que la almacena en caché en el grupo de memoria de malloc para el próximo uso ;
  • La memoria solicitada por malloc a través de mmap() , cuando libera la memoria, devolverá la memoria al sistema operativo y la memoria se liberará realmente

 

Supongo que te gusta

Origin blog.csdn.net/qq_52353238/article/details/130217551
Recomendado
Clasificación