2. Manejo de memoria 1.Manejo de memoria esttica 2.Manejo de memoria dinmica.

  • Published on
    02-Mar-2015

  • View
    0

  • Download
    0

Transcript

  • Diapositiva 1
  • 2. Manejo de memoria 1.Manejo de memoria esttica 2.Manejo de memoria dinmica
  • Diapositiva 2
  • Introduccin La administracin de memoria de una computadora es una tarea fundamental debido a que la cantidad de memoria es limitada. El sistema operativo es el encargado de administrar la memoria del sistema y compartirla entre distintos usuarios y/o aplicaciones. El RTS (Run Time System) de un lenguaje de programacin administra la memoria para cada programa en ejecucin.
  • Diapositiva 3
  • La ejecucin de un programa requiere que diversos elementos se almacenen en la memoria: Cdigo del programa (instrucciones) Datos Permanentes Temporales Direcciones para controlar de flujo del ejecucin del programa
  • Diapositiva 4
  • Asignacin de Memoria Esttica y Dinmica A la asignacin de memoria para algunos elementos fijos del programa que es controlada por el compilador se le llama asignacin de memoria esttica. A la asignacin y posible recuperacin de memoria durante la ejecucin de un programa y bajo su control, se le llama asignacin de memoria dinmica.
  • Diapositiva 5
  • Memoria Esttica Define la cantidad de memoria necesaria para un programa durante el tiempo de compilacin. El tamao no puede cambiar durante el tiempo de ejecucin del programa. Algunos lenguajes de programacin utilizan la palabra static para especificar elementos del programa que deben almacenarse en memoria esttica.
  • Diapositiva 6
  • Memoria Esttica Elementos que residen en memoria esttica: Cdigo del programa Las variables definidas en la seccin principal del programa, las cuales pueden solo cambiar su contenido no su tamao. Todas aquellas variables declaradas como estticas en otras clases o mdulos. Estos elementos se almacenan en direcciones fijas que son relocalizadas dependiendo de la direccin en donde el cargador las coloque para su ejecucin.
  • Diapositiva 7
  • Mtodo comn de asignacin de memoria Memoria disponible Para el programa Variables estticas Cdigo del programa Mapa de memoria Direccin alta Direccin baja
  • Diapositiva 8
  • El stack de ejecucin Cada subprograma (procedimiento, funcin, mtodo, etc.) requiere una representacin de si en tiempo de ejecucin. Estas representaciones se almacenan en el stack de ejecucin con el fin de controlar el flujo de ejecucin del programa.
  • Diapositiva 9
  • Ejemplo . public static int factorial (int n){ if (n==0) return 1; else return n*factorial(n-1); } public static void main (String[] a){ int a=5; System.out.println(factorial(a)); } Cuales elementos del programa sern colocados en memoria esttica? Que elementos se almacenaran en el stack en tiempo de ejecucin?
  • Diapositiva 10
  • Es siempre posible, cuando se disea un programa, conocer la cantidad de memoria necesaria para que este se ejecute correctamente?
  • Diapositiva 11
  • Memoria Dinmica Define el tamao del espacio de memoria necesario para un programa en tiempo de ejecucin. El tamao de los elementos puede cambiar durante la ejecucin del programa. Almacena todos los elementos definidos con la palabra new en un programa.
  • Diapositiva 12
  • Memoria Dinmica Las variables dinmicas son aquellas que crecen de tamao o se reducen durante la ejecucin de un programa. Estas se almacenan en un espacio de memoria llamado heap. El heap se localiza en la regin de memoria que esta encima del stack. Algunos lenguajes de programacin permiten que el programador asigne y desasigne manualmente la memoria. Java utiliza un recolector de basura.
  • Diapositiva 13
  • Uso del heap Para usar el heap un programa requiere: Una o mas variables que refieran el lugar donde se encuentran las variables dinmicas. Un mtodo para obtener memoria (new) Una forma de asignar la direccin de memoria a alguna variable (identificador) Una forma para referirse a la variable dinmica
  • Diapositiva 14
  • Ejemplo public class Punto { private int x=0; private int y=0; public static int totalPuntos =0; Punto (int _x, int _y){ x=_x; y=_y; totalPuntos++; } public void setx(int _x){ x= _x; } public String toString (){ return (+x+,+y+); } public class UsaPunto { public static void main(String[] args){ Punto punto1= new Punto(2,1); Punto punto2 = new Punto(5,5); Punto punto3 = punto1; Punto[] puntos = {punto1,punto2}; System.out.println(Arrays.toString(puntos)); System.out.println(Puntos creados + Punto.totalPuntos); } x=2 y=1 void setx(int _x) String toString () punto1punto2 x=5 y=5 void setx(int _x) String toString () punto3 Metodos de instancia Miembros de instancia Punto totalPuntos = 0 Miembros de clase
  • Diapositiva 15
  • Liberacin de memoria La memoria esttica se libera cuando el programa finaliza su ejecucin. La memoria dinmica se libera de dos formas: Explicita. El programador decide cuando un elemento debe ser eliminado de la memoria. El LP provee mecanismos para liberacin de memoria. Implcita. El sistema decide que elementos deben ser eliminados para recuperar el espacio de memoria que ocupan. El sistema cuenta con un recolector de basura.
  • Diapositiva 16
  • The Garbage Collector Algunos lenguajes de programacin requieren que el programador mantenga la informacin de todos los objetos creados en un programa para que estos puedan ser destruidos cuando ya no son requeridos en la ejecucin. Este mtodo para manejar la memoria puede resultar tedioso y propicio a errores. Java permite la creacin de tantos objetos como sean necesarios sin tener que destriurlos explcitamente cuando ya no son requeridos. El medio ambiente de ejecucin de Java cuenta con un mecanismo llamado recolector de basura (garbage collector) que se encarga de eliminar los objetos cuando ya no existen referencias a ellos. El recolector de basura, de manera automtica, se ejecuta peridicamente durante la ejecucin de un programa.
  • Diapositiva 17
  • Ejemplo Como almacenar Cadenas de Caracteres?
  • Diapositiva 18
  • Se utilizan secuencias de bits para representar letras y otros smbolos. Alfabticos Caracteres Dgitos Caracteres Especiales Caracteres de Control El numero de caracteres que se pueden representar depende de el numero de bits con que se represnta cada carcter. Ejemplo Con 8 bits se pueden representar 256 Caracteres diferentes, donde cada elemento ocupa una secuencia de 8 bits. Una cadena de caracteres esta representada por la concatenacin de las hileras de bits que representan los caracteres individuales. Cadenas de Caracteres
  • Diapositiva 19
  • Una cadena de caracteres es una secuencia finita de 0 o ms caracteres. La longitud de la cadena de caracteres es el nmero de caracteres que contiene. Cadena Vaca o Nula.- Cero caracteres. Delimitadores: Comnmente se usan o dependiendo del lenguaje de programaci n. Ejemplos: S1=INSTITUTO longitud = 9 S2=TECNOLOGICO DE CULIACAN longitud = 23
  • Diapositiva 20
  • Concatenacin = Es la operacin de unir 2 cadenas para formar una sola. Ejemplo: S3 = S1 + + S2 S3=INSTITUTO TECNOLOGICO DE CULIACAN Longitud de S3 = 33 Subcadenas = Se dice que y es subcadena de S si existe: S = X + Y + Z Donde: X y/o Z pueden ser cadenas vacas: Si X es cadena vaca entonces Y es subcadena Inicial Si Z es cadena vaca entonces Y es subcadena final
  • Diapositiva 21
  • Ejemplo: S = Estrutura de Datos de es subcadena de S Est es subcadena inicial de S Datos es subcadena final de S
  • Diapositiva 22
  • ALMACENAMIENTO DE CADENAS Estructura de longitud fija: En este formato cada cadena tiene un registro de longitud fija (generalmente 80 caracteres). Estructura de longitud variable con un mximo fijo: Son cadenas de caracteres que contienen un mximo definido, pero su longitud puede variar y se usa un delimitador especial al final o la longitud actual como parte de la cadena. Estructuras Enlazadas: Cada cadena es almacenada en un nodo que contiene un enlace a la siguiente cadena. Estructura de longitud fija: En este formato cada cadena tiene un registro de longitud fija (generalmente 80 caracteres). Estructura de longitud variable con un mximo fijo: Son cadenas de caracteres que contienen un mximo definido, pero su longitud puede variar y se usa un delimitador especial al final o la longitud actual como parte de la cadena. Estructuras Enlazadas: Cada cadena es almacenada en un nodo que contiene un enlace a la siguiente cadena.
  • Diapositiva 23
  • C PROGRAM PRINTING TWO INTEGERS IN INCREASING ORDER READ *, J, K IF ( J.LE.K) THEN PRINT *,J,K ELSE PRINT *,K,J ENDIF STOP END Ejemplo Almacenar un programa (Texto)
  • Diapositiva 24
  • En estructuras de longitud fija: C PROGRAM PRINTING . READ *, J, K 200210250 280 290300 I F ( J. L E. K ) T H E N 360370380 440
  • Diapositiva 25
  • En estructuras de longitud variable con un mximo fijo: *usando delimitador: $$ C PROGRAM PRINTING TWO IN $$ READ *, J, K $$ IF (J.LE.K) THEN $$ END $$ 123 4 5123 4 5
  • Diapositiva 26
  • En estructuras de longitud variable con un mximo fijo: *usando longitud actual C PROGRAM ORDER READ *, J, K IF (J.LE.K) THEN END 55 18 21 4
  • Diapositiva 27
  • En estructuras Enlazadas: C PROGRAM .. CadenaLiga Inicio READ *, J, K IF (J.LE.K) THEN END