Categorías
CS Courses Versus

Almacenamiento estático vs montón vs pila

El siguiente es el resumen de la asignación de almacenamiento del compilador.

1. Estático vs dinámico

Estático: el compilador puede realizar el almacenamiento mirando solo el texto del programa. Una razón para la asignación estática de tantos objetos de datos como sea posible es que las direcciones de estos objetos se pueden compilar en el código de destino.

Dinámico: el almacenamiento se puede realizar observando lo que hace el programa cuando se está ejecutando.

2. Estático

A las constantes globales y otros datos generados por el compilador (por ejemplo, información para apoyar la recolección de basura) se les asigna almacenamiento estático. Las variables estáticas están vinculadas a las celdas de memoria antes de que comience la ejecución y permanecen vinculadas a la misma celda de memoria durante la ejecución. Por ejemplo, C variables estáticas.

Ventaja: eficiencia (direccionamiento directo), compatibilidad con subprogramas sensibles al historial

Desventaja: falta de flexibilidad, no hay recursividad si este es el * único * tipo de variable, como fue el caso en Fortran

3. Montón

Los datos que pueden sobrevivir a la llamada al procedimiento que los creó generalmente se asignan en un montón. Por ejemplo, nuevo para crear objetos que se pueden pasar de un procedimiento a otro.
El tamaño del montón no se puede determinar en tiempo de compilación. Se hace referencia solo a través de punteros o referencias, por ejemplo, objetos dinámicos en C ++, todos los objetos en Java

Ventaja: proporciona una gestión dinámica del almacenamiento

Desventaja: ineficiente y poco confiable

4. Apilar

A los nombres locales de un procedimiento se les asigna espacio en una pila. El tamaño de la pila no se puede determinar en tiempo de compilación.

  HashMap frente a TreeMap frente a Hashtable frente a LinkedHashMap

Ventajas:
permite la recursividad
conserva el almacenamiento

Desventajas:
Gastos generales de asignación y desasignación
Los subprogramas no pueden ser sensibles al historial
Referencias ineficientes (direccionamiento indirecto)

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *