02-Stackheap.Pdf
Organización de lenguajes y compiladores 2 Aux. Oscar Estuardo de la Mora
Pila y Montículo de memoria (Stack memory, Heap Memory)
Las computadoras en lenguaje de bajo nivel deben trabajar en modo de pila al hacer llamadas a métodos. Por ejemplo si tenemos la siguiente estructura de código: void suma(){ //código } void main(){ //códigosuma(); } Si tenemos: void resta(){ //código } void suma(){ //código resta(); } void main(){ //código suma(); //código } El programa ejecutará primero el método main, y luego el método suma, el método main esta esperando, pero en el método suma esta llamando al método resta, entonces el método suma también esperará la finalización del método resta. Luego que el método resta termina, regresa al métodosuma y cuando el método suma termina regresará al método main.
El programa ejecutará primero el método main, y luego el método suma, pero mientras el método suma esta ejecutándose, el método main estará esperando.
Pila y Montículo de memoria (Heap and Stack Memory)
Organización de lenguajes y compiladores 2 Aux. Oscar Estuardo de la Mora Conforme se están llamando los métodos el tamaño dela pila de memoria (stack memory) crece, conforme a los requerimientos que el programa tenga, si llamamos a un método recursivo por ejemplo: void factorial(int num){ if(i == 0) return; else factorial(num-1); } Este pedirá memoria hasta que se cumpla la condición, por ejemplo: void main(){ factorial(3); }
Podemos ver en la gráfica que conforme se llaman métodos, se pide memoria para poder llamaral siguiente método factorial, mientras el otro se queda esperando a que termine, podemos notar el comportamiento de pila. El método main llama al método factorial enviándole un '3', luego este manda a llamar al método factorial enviándole un '2', luego este se vuelve a llamar con un '1', y este manda a llamarse de nuevo con un '0', como en la condición del algoritmo dice que cuando sea '0' elnúmero, que regrese entonces, termina el método factorial(0), y se regresa al factorial(1), luego este termina y regresa al factorial(2), este termina y regresa a factorial(3), este termina y regresa al método main de donde fue llamado originalmente.
Pila y Montículo de memoria (Heap and Stack Memory)
Organización de lenguajes y compiladores 2 Aux. Oscar Estuardo de la Mora Si tenemos un códigode esta forma: void metodo4(){ //código metodo5(); //código } void método2(){ //código metodo3(); //código } void metodo1(){ //código metodo2(); //código metodo4(); } void main(){ //código metodo1(); //código metodo6(); //código }
Primero se llama al método main(), luego este llama al metodo1(), luego este manda a llamar al metodo2(), y este manda a llamar a metodo3(), metodo3() termina yregresamos a metodo2(), metodo2() termina y regresamos a metodo1(), metodo1() manda a llamar a metodo4(), metodo4() manda a llamar a metodo5(), luego metodo5() termina y regresamos a metodo4(), luego regresamos a metodo1() y metodo1() termina, regresamos a main(), luego manda a llamar a metodo6(), metodo6() termina y luego regresamos al main().
Pila y Montículo de memoria (Heap and Stack Memory)Organización de lenguajes y compiladores 2 Aux. Oscar Estuardo de la Mora El Heap de memoria trabaja de forma distinta, este siempre va a crecer, En el Heap de memoria se guardan los objetos y arreglos que se declaran en un programa, cuando queremos crear un objeto en el método donde esta declarado tenemos su instancia, su puntero o en otras palabras su dirección de memoria es contenida en lainstancia, y el objeto en si, esta en el Heap. class Objeto{ int a; int b; } public static void main(){ Objeto obj1 = new Objeto(); Objeto obj2 = new Objeto(); } Por lo general el espacio de memoria del Heap va a ser mucho mayor que el del Stack pues va a contener todos los objetos y arreglos. Como podemos ver el método main en el Stack va a tener cierto espacio que ocupan las instancias declaradas...
Regístrate para leer el documento completo.