La huella de memoria se refiere a la cantidad de memoria principal que un programa utiliza o hace referencia mientras se ejecuta. [1]
La palabra huella generalmente se refiere a la extensión de las dimensiones físicas que ocupa un objeto, dando una idea de su tamaño. En informática, la huella de memoria de una aplicación de software indica sus requisitos de memoria en tiempo de ejecución, mientras el programa se ejecuta. Esto incluye todo tipo de regiones de memoria activa como segmento de código que contiene (principalmente) instrucciones de programa (y ocasionalmente constantes), segmento de datos (tanto inicializado como no inicializado), [1] memoria de montón , pila de llamadas , además de la memoria requerida para contener cualquier estructura de datos adicional, como tablas de símbolos , estructuras de datos de depuración , archivos abiertos, bibliotecas compartidas asignadas al proceso actual, etc., que el programa necesita alguna vez mientras se ejecuta y se cargará al menos una vez durante toda la ejecución. [2]
Los programas más grandes ocupan más memoria. La memoria de una aplicación es aproximadamente proporcional a la cantidad y el tamaño de las bibliotecas o clases compartidas que carga, mientras que las bibliotecas estáticas, los programas ejecutables y las áreas de datos estáticos contribuyen a una parte fija (constante). Los programas en sí mismos no suelen contribuir con las porciones más grandes a su propia memoria, sino que las estructuras introducidas por el entorno de ejecución ocupan la mayor parte de la memoria. Por ejemplo, un compilador de C++ inserta vtables , objetos de información de tipo y muchos objetos temporales y anónimos que están activos durante la ejecución de un programa. En un programa Java, la memoria ocupada está compuesta predominantemente por el entorno de ejecución en forma de la propia máquina virtual Java (JVM) que se carga indirectamente cuando se inicia una aplicación Java. Además, en la mayoría de los sistemas operativos, los archivos de disco abiertos por una aplicación también se leen en el espacio de direcciones de la aplicación, lo que contribuye a su memoria ocupada.
Durante la década de 1990, la memoria de las computadoras se volvió más barata y los programas con mayor capacidad de memoria se volvieron comunes. Esta tendencia se ha debido principalmente al uso generalizado de software de computadoras, desde grandes aplicaciones para toda la empresa que consumen grandes cantidades de memoria (como bases de datos ), hasta software de creación y edición multimedia que consume mucha memoria. Para abordar las necesidades de memoria cada vez mayores, se introdujeron sistemas de memoria virtual que dividen la memoria disponible en porciones de igual tamaño y las cargan desde " páginas " almacenadas en el disco duro según sea necesario.
Este enfoque para dar soporte a programas que consumen mucha memoria ha tenido bastante éxito. La mayoría de los sistemas operativos modernos, incluidos Microsoft Windows , macOS de Apple y todas las versiones de Linux y Unix , ofrecen sistemas de memoria virtual.
Tradicionalmente, los programas que requieren poca memoria eran importantes para ejecutar aplicaciones en sistemas integrados donde la memoria a menudo era un recurso limitado [1] , tanto que los desarrolladores solían sacrificar la eficiencia (velocidad de procesamiento) solo para hacer que las huellas de los programas fueran lo suficientemente pequeñas como para caber en la RAM disponible. Por ejemplo, Sun Microsystems lanzó una versión de su máquina virtual Java (JVM) para dispositivos tan limitados; se la conoce con el nombre de KVM . La KVM funciona en plataformas donde la memoria se mide en kilobytes , a diferencia de los megabytes (o incluso gigabytes ) de memoria disponibles en una PC doméstica normal o en los teléfonos móviles y tabletas más modernos.