El documento habla sobre la administración de la memoria en una computadora. Explica que existen dos tipos de memoria: estática y dinámica. La memoria estática se reserva durante la compilación mientras que la memoria dinámica se define en tiempo de ejecución. También describe que la memoria se divide en zona de datos, pila y montón, donde se almacenan las instrucciones, variables y parámetros del programa.
2. 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.
3.
4. 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.
5.
6. 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.
7. 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 (callstack). Área de datos dinámicos, conocida como el montón (heap), Área de datos estáticos. Área de código.
8. 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.
9. import java.io.*; publicclassFact { 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)); } } publicclass factorial { public static intcalculaR (int N) { if (N==1) return 1; else return N* factorial.calculaR(N-1); } public static intcalculaC (int v) { int i, F=1; if (v==1) return 1; else for (i=v; i>0; i--) F=F*i; return F; } }