¿Cuál es la representación física del montón y la pila?

9

Puedo entender fácilmente cómo .bss y el código tienen representaciones físicas en el procesador que tiene un banco de memoria para las instrucciones que un contador de programa puede contar y el bss (símbolo de inicio de bloque) son solo datos globales. Pero luego está la pila de variables locales y el montón de memoria dinámica. ¿Cómo se ponen físicamente estas cosas en el circuito?

Niklas
fuente

Respuestas:

6

Nota: Me refiero principalmente a x86 porque estoy más familiarizado con él y está ampliamente documentado:

En x86 (y la mayoría de las otras arquitecturas) la pila solo reside en la memoria como todo lo demás. El procesador manipula la pila a través de un puntero, que generalmente se almacena en un registro (el puntero de la pila). Las instrucciones push y pop cambiarán el valor del puntero de la pila, cambiando dónde está la parte superior de la pila.

El montón es una abstracción de software . Como su nombre lo indica, es solo un trozo de RAM que un asignador corta y distribuye punteros. En términos físicos, el montón no se ve diferente a cualquier otra parte de la RAM.

Sin embargo, la paginación y la segmentación están tangencialmente relacionadas con el montón. Principalmente tienen que ver con la multitarea, donde no se puede permitir que los procesos modifiquen la RAM que no poseen explícitamente.

Mathew Hall
fuente
3
La paginación tiene más que ver con la administración de la memoria en general, la unidad en la que la memoria física se asigna a una dirección lógica, que solo con restricciones de acceso, aunque las últimas tienden a aplicarse como una característica adicional de la unidad de administración de memoria.
Chris Stratton
4

Lógicamente hablando, la pila y el montón generalmente son solo memoria; sin embargo, en un nivel de implementación, esperamos que sean atendidos principalmente desde caché. En la mayoría de los sistemas, llegan dinámicamente a través de algoritmos de almacenamiento en caché, pero ha habido sistemas que admiten la ubicación explícita en la memoria caché u otra memoria más rápida de lo habitual, y probablemente también aquellos que admiten dejar indicios de que los datos particulares deben tener prioridad preferencial para su ubicación allí como permisos de espacio.

El diseño de software de bajo nivel y los generadores de código de compilación esperan tener en cuenta la organización del acceso a los datos, lo que probablemente resulte en una buena utilización de la memoria caché, frente a las constantes fallas en la memoria caché.

Algunos procesadores tienen un registro de dirección de retorno, que funciona como una especie de caché de pila explícito de una profundidad (probablemente también haya aquellos con varias pilas de hardware profundas, aunque no se me ocurren ejemplos).

Chris Stratton
fuente