La función malloc() en C solicita al asignador de memoria un bloque de espacio, pero su éxito no garantiza que se haya consumido inmediatamente RAM física. A diferencia de los arreglos fijos en la pila, malloc() permite determinar el tamaño en tiempo de ejecución, devolviendo un puntero a una región de memoria virtual. En Linux, esta reserva inicial solo asigna direcciones virtuales al proceso; la memoria física real no se asigna hasta que el programa accede efectivamente a esos datos, un evento conocido como page fault.
Este mecanismo explica por qué una asignación de 1 GB puede mostrar un alto uso de memoria virtual (VIRT) pero un bajo uso residente (RES) en herramientas como top. Al escribir en la memoria, el sistema operativo proporciona la respaldo físico página por página. Además, Linux utiliza overcommit, permitiendo que malloc() tenga éxito aunque no haya RAM suficiente disponible inmediatamente, lo que puede llevar al OOM killer a terminar procesos si la presión de memoria es extrema.
Al liberar la memoria con free(), el bloque se devuelve al asignador, que puede retenerlo para futuras solicitudes en lugar de devolverlo al kernel. Por tanto, RES no siempre disminuye proporcionalmente. Comprender esta distinción entre memoria virtual y física es crucial para depurar fugas de memoria y optimizar el rendimiento de aplicaciones en entornos Linux.
