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.