ios - pila - que es heap
Entendimiento rápido de pila/montón (2)
Las clases (tipos de referencia) se asignan en el montón, los tipos de valor (como Struct, String, Int, Bool, etc.) viven en la pila. Consulte este tema para obtener respuestas más detalladas: ¿Por qué elegir Struct Over Class?
Quiero no entender lo que está almacenado en la pila / montón de forma rápida. Tengo una estimación aproximada: todo lo que imprime y la dirección de la memoria aparecen no los valores, esos se almacenan en la pila y lo que se imprime como valores, los está en el montón, básicamente de acuerdo con los tipos de valor y referencia. ¿Estoy completamente equivocado? Y, opcionalmente, ¿podría proporcionar una representación visual de la pila / montón?
como lo indicó juul, los tipos de referencia se almacenan en el montón y los valores en la pila ...
Aquí quiero dar una explicación de por qué ...
Pila y un montón?
La pila se utiliza para la asignación de memoria estática y el montón para la asignación de memoria dinámica, ambos almacenados en la memoria RAM de la computadora.
Las variables asignadas en la pila se almacenan directamente en la memoria y el acceso a esta memoria es muy rápido, y la asignación se trata cuando se compila el programa. Cuando una función o un método llama a otra función que a su vez llama a otra función, etc., la ejecución de todas esas funciones permanece suspendida hasta que la última función devuelve su valor. La pila siempre se reserva en un orden LIFO, el bloque reservado más reciente es siempre el siguiente bloque que se liberará. Esto hace que sea realmente sencillo hacer un seguimiento de la pila, liberar un bloque de la pila no es más que ajustar un puntero.
Las variables asignadas en el montón tienen su memoria asignada en el tiempo de ejecución y acceder a esta memoria es un poco más lento, pero el tamaño del montón solo está limitado por el tamaño de la memoria virtual. El elemento del montón no tiene dependencias entre sí y siempre se puede acceder de forma aleatoria en cualquier momento. Puede asignar un bloque en cualquier momento y liberarlo en cualquier momento. Esto hace que sea mucho más complejo hacer un seguimiento de qué partes del montón se asignan o liberan en un momento dado.