Esta es una gran pregunta. Las cuatro respuestas ante mí parecen sugerir que estás confundiendo “montón, la estructura de datos” con “montón, la región de la memoria”. No lo creo. Por lo tanto, voy a tratar de responder su pregunta, suponiendo que su pregunta sea “¿por qué necesitamos tanto el montón como la pila? ¿Por qué no se puede hacer todo solo con la pila?” Si esa no fue la intención de su pregunta, hágamelo saber para que pueda eliminar esta respuesta.
Ahora, para la respuesta real: ¿por qué apilar Y apilar?
Lo más importante que debemos entender aquí es que la funcionalidad de la pila es muy diferente de la del montón.
- Si quiero resolver problemas del mundo real, ¿qué debo hacer, encontrar esos problemas y luego aprender las estructuras de datos y algoritmos requeridos o viceversa?
- ¿Dónde se puede encontrar una foto y detalles biográficos de Burton Howard Bloom, inventor del filtro Bloom?
- ¿Cuál es la lista de MOOC que uno debe mirar en su licenciatura para aprender estructuras y algoritmos de datos C, C ++?
- ¿Cuál es el orden cronológico de los algoritmos de reconocimiento facial?
- Cómo analizar los detalles del problema en el concurso de codificación
En un lenguaje de programación típico, se crea un “marco de pila” cuando se llama a una función. De ahora en adelante, todas las variables locales de esa función se crean dentro de los límites de este marco de pila. Luego, cuando la función regresa, su marco de pila se “borra”. Darse cuenta de que todo esto es “automágico”. El programador de ese lenguaje de programación de alto nivel NO tuvo que crear el marco de la pila cuando se llamó a la función, no colocó variables locales en él cuando se crearon / usaron, y no eliminó el marco de la pila cuando la función regresó. El sistema de tiempo de ejecución subyacente proporcionó toda esa funcionalidad.
Pero, fundamentalmente, parece haber un gran programa con la pila: las cosas surgen en el marco de la pila, ¡PERO luego desaparecen cuando vuelve la función! Entonces, si quisiera tener una variable que fuera accesible desde múltiples funciones, entonces, la pila parece ser un mal lugar para crearla.
Por lo tanto, necesitamos un lugar donde podamos crear variables que puedan existir llamadas de función “ENTRE / ACROBADAS”. Obviamente, esto tendrá que estar fuera de la pila. ¿Cómo podemos llamar a este “montón de memoria” donde los datos están esparcidos por todo el lugar? Hmm! Digamos que es un montón, o eso parece haber decidido nuestra gente mayor.
Otro hecho muy importante aquí es que puede asignar “todo lo que quiera” en el montón. Si hay espacio en el montón, entonces la asignación tendrá éxito. Por otro lado, cualquier cosa que haya asignado en el montón se puede liberar en cualquier momento. La pila no te da la libertad de “liberar objetos en la pila” porque eso podría estropear la pila.
Es simplemente “coincidente” que la pila se implementa “exactamente” como la “pila denominada estructurada de datos”, pero el montón no tiene una relación real con la “estructura de datos denominada montón”. En este caso, creo que necesitamos ver el “montón” como eso: un montón de memoria … es decir, una región de memoria grande y desorganizada donde podemos colocar cosas (como en datos, de cualquier tamaño) y eliminar cosas de .
HTH!