¿Cuál es la diferencia entre la memoria de almacenamiento dinámico y la memoria principal?


Respuesta 1:

Cuando dice "memoria principal", supongo que se refiere al "espacio de direcciones". su sistema operativo maneja la distinción entre "memoria real" y "espacio de direcciones"

Hago esta distinción porque puede tener mucho más espacio de direcciones de lo que puede tener memoria. Windows, por ejemplo, tiene un espacio de direcciones de 64 bits actualmente, no tendrá memoria real asociada con todo ese espacio de direcciones, parte de ella se usa para cosas del sistema operativo, algunas para controladores mapeados en memoria, algunas para archivos mapeados en memoria, incluyendo cosas de archivos de página.

Por lo tanto, puede preguntar al sistema operativo, "resérveme un bloque de espacio de direcciones". También puede pedirle al sistema operativo que asigne memoria real (por proceso o compartida entre procesos) para respaldar ese espacio de direcciones o para otros usos, como archivos asignados en memoria.

Los bloques de almacenamiento dinámico son ambas operaciones en una. "Necesito un espacio de dirección de X bytes respaldado con memoria real". Estos bloques son rastreados por el sistema operativo. La mayoría de las veces, el lenguaje en tiempo de ejecución también tiene su propia administración que se encuentra en la parte superior de los bloques de almacenamiento dinámico para la asignación de archivos. Entonces esto se referiría a una gestión de memoria / gestión de almacenamiento dinámico. El tiempo de ejecución de C, por ejemplo, realiza un seguimiento de los bloques asignados y liberados para que se puedan realizar asignaciones más pequeñas de manera eficiente. Preguntar constantemente al sistema operativo por bloques pequeños (por ejemplo, 10 bytes para una cadena) sería terriblemente ineficiente. La administración de memoria de tiempo de ejecución c que ya ha asignado un bloque de almacenamiento dinámico más grande, lo distribuirá en pequeños fragmentos.

Como señaló Jesse Pollard, se trata más del uso. Si le pregunta directamente al sistema operativo la dirección / espacio y la memoria, hay un tamaño mínimo de asignación (generalmente en "páginas") y debe administrar la memoria usted mismo. Si le pide memoria a un montón, a menudo no hay un tamaño mínimo de asignación, está haciendo la administración por usted.

Puede tener muchos tipos de montones, a menudo el software asigna montones para diferentes propósitos y lo organiza en función de su uso previsto. Cada uno de estos montones provino de la memoria principal, pero se accede a ellos a través de apis que controlan el acceso a cada montón.

Un ejemplo sería un montón de almacenamiento de datos a largo plazo, almacenamiento a mediano y corto plazo. (C # y Java tienen algo de este tipo, creo). Al ajustar la forma en que entrega las estructuras de datos para cada montón, puede procesar la asignación y liberar solicitudes de manera mucho más eficiente. La asignación y liberación de memoria puede ser una gran carga en el software de alto rendimiento de lo contrario.


Respuesta 2:

¿Cuál es la diferencia entre la memoria de almacenamiento dinámico y la memoria principal?

Ninguna.

El montón es un uso de memoria, no un tipo de memoria. Así como una pila es un uso, el código del programa es un uso ...

El montón tiende a ser la porción de memoria entre la pila y el código del programa (junto con secciones para datos de solo lectura y datos estáticos).

https: //www.thegeekstuff.com/201 ...