Diferencia entre mmap y malloc
mmap vs malloc
La memoria dinámica en C se refiere 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. Una de ellas es malloc, que se refiere a la asignación de memoria. Un sistema UNIX tiene mmap, que se refiere a un sistema mapeado en memoria que viene con su propia E/S única. Ambos (mmap y malloc) realizarán la misma función en su valor nominal, pero un examen más detenido 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 sugiera que la memoria disponible es significativamente limitada. Esto se hace midiendo el rendimiento del programa frente a la gestión de la memoria.
malloc es la principal interfaz de asignación de memoria. Este es el más grande de la biblioteca C. Parte del código de gestión que contiene es mmap. Cuando malloc se está ejecutando, recopila todos los recursos del sistema disponibles. Se pueden movilizar recursos adicionales del sistema a través del núcleo, que es una de las estrategias de administración de memoria que utilizan los sistemas para garantizar una asignación de memoria satisfactoria. Sin embargo, el proceso no es simple y se ha vuelto 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, causar un rendimiento deficiente.
Por otro lado, ‘mmap’ es una llamada al sistema que se encarga de pedirle al kernel que busque una región no utilizada y contigua en una dirección de aplicación que sea lo suficientemente grande como para permitir mapear varias páginas de memoria. También se crean estructuras de gestión de memoria virtual que, en realidad, no pueden dar lugar a un defecto de segmento.
Malloc generalmente realiza la mayor parte del proceso de administración de memoria. Si el programa necesita memoria adicional, esta se toma prestada del sistema operativo. Por otro lado, Mmap usa un cambio de contexto que convierte a kernel land.
Malloc es más adecuado para asignar memoria en cualquier aplicación que se ejecute en el sistema en lugar de usar mmap. Esto es necesario que suceda de forma predeterminada, excepto en casos especiales en los que está permitido.
mmap se puede utilizar para acelerar la respuesta de las aplicaciones. Sin embargo, esto no es recomendable ya que terminará sacrificando algunos bytes por las páginas para que la aplicación pueda funcionar sin problemas. Aunque el contenido de datos puede parecer muy pequeño al principio, extrapolarlo cuando muchas aplicaciones quieren ejecutarse puede ralentizar aún más el sistema.
Después de medir el rendimiento y el uso de recursos, se debe realizar una evaluación exhaustiva del uso de datos por parte de todas las aplicaciones que se ejecutan en el sistema. Si se puede mostrar la vida útil de las aplicaciones en ejecución, puede mejorar.
La desventaja de usar mmap para asignar memoria es que es costoso asignar y distribuir datos en fragmentos. Esto se debe a que los datos se dividen en varios campos y también evita que mmap realice llamadas al sistema.
mmap tiene una ventaja sobre malloc porque la memoria utilizada por mmap se devuelve inmediatamente al sistema operativo. La memoria utilizada por malloc nunca se reclama a menos que haya una interrupción del segmento de datos. Esta memoria se guarda especialmente para su reutilización.
Resumen
‘malloc’ representa el punto de asignación de memoria principal
El sistema llama y solicita kernel mmap para encontrar regiones no utilizadas en direcciones de aplicaciones que pueden asignarse a varias páginas de memoria
mmap no se recomienda para asignar memoria porque divide la memoria disponible y no puede realizar llamadas al sistema
Una ventaja de mmap sobre malloc es la disponibilidad de memoria, en comparación con la memoria malloc, que se reutiliza.