La diferencia entre montón y pila
Método de administración: para la pila, el compilador lo administra automáticamente, sin nuestro control manual; para el montón, el trabajo de liberación lo controla el programador, lo que es propenso a pérdidas de memoria.
Tamaño de la aplicación:
Pila: en Windows, la pila es una estructura de datos que se extiende a direcciones inferiores y es un área de memoria continua. Lo que esta oración significa es que la dirección en la parte superior de la pila y la capacidad máxima de la pila están predeterminadas por el sistema. En WINDOWS, el tamaño de la pila es 2 M (algunos dicen que es 1 M, en resumen, es un. constante determinada en el momento de la compilación). Si el espacio solicitado excede el espacio restante de la pila, se generará un desbordamiento. Por lo tanto, el espacio disponible en la pila es menor.
Montón: El montón es una estructura de datos que se extiende a direcciones altas y es un área de memoria discontinua. Esto se debe a que el sistema utiliza una lista vinculada para almacenar direcciones de memoria libre, que son naturalmente discontinuas, y la dirección transversal de la lista vinculada es de direcciones bajas a direcciones altas. El tamaño del montón está limitado por la memoria virtual disponible en el sistema informático. Se puede observar que el espacio obtenido por el montón es más flexible y mayor.
Problema de fragmentación: para el montón, la nueva/eliminación frecuente inevitablemente causará una discontinuidad en el espacio de memoria, lo que resultará en una gran cantidad de fragmentos y reducirá la eficiencia del programa. Para la pila, este problema no existe, porque la pila es una cola de primero en entrar y último en salir. Son tan uno a uno que nunca es posible extraer un bloque de memoria del medio de la pila.
Método de asignación: el montón se asigna dinámicamente, no hay un montón asignado estáticamente. Hay dos formas de asignar la pila: asignación estática y asignación dinámica. La asignación estática la realiza el compilador, como la asignación de variables locales. La asignación dinámica la asigna la función alloca, pero la asignación dinámica de la pila es diferente de la del montón. Su asignación dinámica la libera el compilador y no requiere que la implementemos manualmente.
Eficiencia de asignación: la pila es una estructura de datos proporcionada por el sistema de la máquina. La computadora proporcionará soporte para la pila en la parte inferior: se asignan registros especiales para almacenar la dirección de la pila y se proporcionan instrucciones especiales. ejecutado para empujar y hacer estallar la pila. Esto determina que la eficiencia de la pila es relativamente alta. El montón lo proporciona la biblioteca de funciones C/C y su mecanismo es muy complejo.