unidad 2
TRANSCRIPT
UNIDAD 2
MANEJO DE MEMORIA
• La administración de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada.
• La ejecución de un programa requiere que diversos elementos se almacenen en la memoria:– Código del programa (instrucciones)– Datos
• Permanentes• Temporales
– Direcciones para controlar de flujo de la ejecución del programa.
Memoria estática
• Es decir, es el espacio de memoria que se crea al declarar variables, arreglos o matrices de forma estática y cuyo tamaño no podemos modificar durante la ejecución del programa ni liberar el espacio que ocupa.
• Es la memoria que se reserva en el momento de la compilación, antes de que se ejecute el programa.
Desventaja de la memoria estática
• La cantidad de memoria se reserva antes de conocer los datos concretos del
problema a resolver, lo cual lleva siempre a un máximo de memoria que
en la mayor parte de las ocasiones no se utiliza.
Memoria dinámica
• Define el tamaño del espacio de memoria necesario para un programa en tiempo de ejecución.
• El tamaño de los elementos puede cambiar durante la ejecución del programa.
Manejo de memoria.
• La memoria está dividida en tres partes:
– Zona de Datos– Stack – Heap
Zona de datos.
• La Zona de Datos es donde guardamos las instrucciones del programa, las clases, los métodos, y las constantes.
• Esta parte de la memoria es totalmente fija, y nada durante el tiempo ejecución lo puede cambiar.
Stack & heap• Durante la ejecución de un programa, se
utilizan varias zonas de memoria bien diferenciadas para guardar los parámetros, el contexto de la ejecución, las variables locales, el código, etc.... – Pila de llamadas (call stack).– Área de datos dinámicos, conocida como el
montón (heap),– Área de datos estáticos.– Área de código.
• Cada subprograma (procedimiento, función, método, etc.) requiere una representación de sí en tiempo de ejecución.
• Estas representaciones se almacenan en el stack de ejecución con el fin de controlar el flujo de ejecución del programa.
public class factorial { public static int calculaR (int N) { if (N==1) return 1; else return N* factorial.calculaR(N-1); }
public static int calculaC (int v) { int i, F=1; if (v==1) return 1; else for (i=v; i>0; i--) F=F*i; return F; }}
import java.io.*;public class Fact{public static void main(String[] args) throws IOException{ BufferedReader leer= new BufferedReader (new InputStreamReader (System. in)); int valor; System.out.print("Escribe el número: "); System.out.println(); valor=Integer.parseInt(leer.readLine()); System.out.println("CALCULA FACTORIAL CON RECURSIVIDAD (STACK)"); System.out.println(factorial.calculaR(valor)); System.out.println("CALCULA FACTORIAL CON CICLOS (MEMORIA ESTATICA)"); System.out.println(factorial.calculaC(valor));}}