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.
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)