GNU/Linux >> Tutoriales Linux >  >> Linux

malloc devuelve memoria o espacio de direcciones virtuales

malloc asigna memoria en el montón, punto.

Su biblioteca C generalmente mantiene una lista (o alguna estructura de datos más compleja) de fragmentos de memoria disponibles, encontrando un fragmento adecuado para satisfacer un malloc (posiblemente dividiendo una parte más grande en varias más pequeñas) y devolviendo free agregaría memoria a la lista (posiblemente fusionando algunos fragmentos más pequeños en uno más grande)

Solo cuando la lista no contiene una porción lo suficientemente grande para satisfacer su malloc , la biblioteca le pedirá al sistema operativo más memoria, p. utilizando la llamada al sistema sbrk. La dirección devuelta por esta llamada al sistema puede ser una dirección virtual o una dirección real, dependiendo de su hardware, pero como programador no puede (y no necesita) saber esto.

Diciendo eso malloc asigna espacio de dirección virtual en lugar de un bloque en el montón es como decir que read lee desde su disco duro en lugar de un archivo:es irrelevante desde la perspectiva de la persona que llama, y ​​no siempre es cierto.


Hay al menos 3 formas de medir el consumo de memoria:

  • espacio de direcciones virtuales:la cantidad de espacio de direcciones de su proceso consumido por la asignación. esto también afecta la fragmentación y las asignaciones futuras contiguas máximas que puede realizar.
  • cargo de compromiso:esta es la contabilidad del sistema operativo del almacenamiento físico máximo posible necesario para mantener toda la memoria grabable, no respaldada por archivos o dispositivos asignada a su proceso. si el sistema operativo le permite exceder la memoria física total + el intercambio, pueden ocurrir cosas muy malas la primera vez que se escribe en el exceso.
  • memoria física:la cantidad de recursos físicos (que posiblemente incluya intercambio, según su interpretación) que ocupa actualmente su proceso. Esto podría ser menor que el cargo de compromiso debido a páginas cero vírgenes y mapas de archivos grabables privados vírgenes, o más que el cargo de compromiso debido a asignaciones no modificables o compartidas que utiliza el proceso (pero generalmente se pueden intercambiar/descartar).

malloc generalmente los afecta a todos.

Editar: Entonces, la mejor manera que se me ocurre para responder a tu pregunta es decir:

malloc asigna memoria virtual .

Y la memoria virtual consume:

  • espacio de direcciones virtuales,
  • cobrar cargo, y
  • recursos físicos, si se ha escrito.

malloc es una llamada de biblioteca. En Linux, a su vez llama a sbrk llamada del sistema. sbrk aumentará el tamaño del montón, pero en realidad no asigna memoria física. Cuando el proceso intenta acceder a esta dirección, un page fault se genera y luego, en ese momento, el kernel asigna la página física real y los mapas a la dirección virtual.

TL;DR:malloc devuelve una dirección virtual y NO asigna memoria física.

Mira esto.


Linux
  1. Comandos de Linux:exploración de la memoria virtual con vmstat

  2. Cómo implementar malloc determinista

  3. ¿Realloc mantiene la alineación de memoria de posix_memalign?

  4. Force free () para devolver la memoria malloc al sistema operativo

  5. ¿Cómo se determina el tamaño de página en el espacio de direcciones virtuales?

Comprensión de la compatibilidad con direcciones virtuales de 52 bits en el kernel Arm64

Cómo encontrar la dirección IP de una máquina virtual KVM

Cómo aumentar el espacio de disco virtual de VM en VirtualBox

Linux:¿cómo se divide un espacio de direcciones virtuales de proceso de 64 bits en Linux?

Gestión de memoria de Linux:memoria virtual y paginación de demanda

Cómo aumentar el espacio de disco virtual de la máquina virtual en VirtualBox y VMware