La diferencia entre montón y pila
1. Diferentes métodos de administración
Los programadores administran el montón llamando a las funciones de la biblioteca del sistema, por lo que si la administración no es lo suficientemente buena, a menudo se producirán pérdidas de memoria.
El sistema informático asigna memoria a la pila y el sistema tiene un registro especial para almacenar el puntero de la pila.
2. Diferentes métodos de crecimiento
El montón se expande a direcciones más altas, lo que a menudo se dice que crece hacia arriba. Es un área de memoria discontinua.
La pila se expande hacia direcciones inferiores, lo que a menudo se dice que crece hacia abajo. es un área de memoria contigua.
3. Diferentes tamaños de espacio
El tamaño del montón puede llegar a 4G. En Linux de 32 bits, la memoria virtual efectiva del sistema también es 3,2G.
El tamaño de la pila generalmente oscila entre 1M y 10M (muy diferente del montón).
4. Diferentes velocidades de memoria
La velocidad de la memoria de la pila es más rápida. Como se mencionó anteriormente, la pila es memoria asignada por el sistema y existe esta secuencia emergente FILO, por lo que la velocidad de la memoria de la pila es más rápida.
El montón lo asigna el programador y lo proporciona la biblioteca de funciones C/C++. Además, el mecanismo es relativamente complejo y se recorrerá uno por uno para encontrar un área de memoria del tamaño adecuado. Entonces lleva más tiempo.
5. Diferentes contenidos de almacenamiento
Cuando se llama a una función, la pila primero envía la dirección de la siguiente instrucción en la función que llama (la siguiente declaración ejecutable de la declaración de llamada de función) , y luego son los argumentos de la función, y luego son las variables locales de la función llamada.
Una vez completada esta llamada, primero se extraen de la pila las variables locales, luego los parámetros y, finalmente, el puntero superior de la pila apunta a la dirección de la primera instrucción almacenada. El programa continúa ejecutando la siguiente declaración ejecutable.
El montón generalmente usa un byte para almacenar su tamaño en el encabezado. El montón se usa para almacenar datos cuya vida útil no tiene nada que ver con las llamadas a funciones. El contenido específico lo organiza el programador.