Mmap y malloc

Anonim

mmap vs malloc

Hay memoria dinámica en C y esto apunta a la asignación de memoria en el lenguaje de programación C a través de un conjunto de funciones presentes en la biblioteca estándar de C. Uno de ellos es malloc, que se refiere a la asignación de memoria. En el sistema UNIX hay mmap, que se refiere a un sistema mapeado en memoria que viene con su propia E / S única. Estos dos (mmap y malloc) realizarán la misma función a su valor nominal, pero un análisis más detallado revela algunas diferencias. Estas diferencias, que surgen de la funcionalidad, se describen a continuación.

Diferencias

En primer lugar, es importante establecer si existe alguna evidencia que indique que existe una capacidad de sofocación significativa de la memoria disponible. Esto se hace a través de la medición del rendimiento del programa en comparación con la gestión de la memoria.

La principal interfaz de asignación de memoria es malloc. Este es el más grande en la biblioteca de C. Parte del código de gestión contenido en él es mmap. Cuando se está ejecutando malloc, reúne todas las instalaciones del sistema disponibles. Las instalaciones adicionales del sistema se pueden movilizar a través del kernel, que es una de las estrategias de administración de memoria que utilizan los sistemas para asegurar que haya una asignación de memoria satisfactoria. Sin embargo, el proceso no es sencillo, y se ha hecho que sea complicado por la única razón de evitar que las personas creen programas simples que pueden desorganizar la asignación de memoria y, por lo tanto, crear un rendimiento deficiente.

'Mmap', por otra parte, es una llamada al sistema que se hace cargo y solicita al núcleo que encuentre una región contigua y no utilizada en la dirección de una aplicación que sea lo suficientemente grande como para permitir el mapeo de varias páginas de memoria. También existe la creación de estructuras de gestión de memoria virtual que, en efecto, no pueden dar como resultado un segfault.

Malloc generalmente funciona en la mayoría del proceso de administración de memoria. En el caso de que el programa requiera memoria adicional, esto se toma prestado del sistema operativo. Mmap, por otro lado, hace uso de un cambio de contexto que se convierte en tierra del núcleo.

Malloc es el más adecuado para asignar memoria en cualquier aplicación que se ejecute en el sistema en lugar de usar mmap. Esto es lo que se requiere que ocurra de forma predeterminada, excepto en casos especiales en los que se puede permitir.

Mmap se puede utilizar para acelerar la respuesta dada por las aplicaciones. Sin embargo, esto no es recomendable ya que termina sacrificando algunos bytes a las páginas para que la aplicación pueda ejecutarse sin problemas. Aunque el contenido de los datos puede parecer pequeño al principio, extrapolarlo cuando numerosas aplicaciones desean ejecutarse puede, de hecho, ralentizar aún más el sistema.

Después de medir el rendimiento y el uso de los recursos, se debe realizar una evaluación exhaustiva del uso de datos por todas las aplicaciones que se ejecutan en el sistema. Si se puede mostrar la vida útil de las aplicaciones en ejecución, puede mejorar.

El uso de mmap para asignar memoria tiene la desventaja de que la asignación y la desasignación de datos en fragmentos es costosa. Esto se debe a que los datos se dividen en numerosas áreas y también impide que mmap realice llamadas al sistema.

Mmap es ventajoso sobre malloc porque la memoria usada por mmap se devuelve inmediatamente al sistema operativo. La memoria utilizada por malloc nunca se devuelve a menos que haya un salto de segmento de datos. Este recuerdo está especialmente guardado para ser reutilizado.

Resumen

'Malloc' significa punto de asignación de memoria principal

Un sistema mmap llama y solicita a un kernel que encuentre regiones no utilizadas en las direcciones de las aplicaciones que puedan acomodar la asignación de varias páginas de memoria

Mmap no se recomienda para asignar memoria, ya que divide la memoria disponible y no puede hacer llamadas al sistema

Un beneficio de mmap sobre malloc es la disponibilidad de memoria, a diferencia de la memoria de malloc, que se reutiliza.