2.1 Manejo de memoria estática. 2.2 Manejo de memoria dinámica. Unidad 2.-Manejo de memoria.

  • Published on
    02-Apr-2015

  • View
    102

  • Download
    0

Embed Size (px)

Transcript

  • Diapositiva 1
  • Diapositiva 2
  • 2.1 Manejo de memoria esttica. 2.2 Manejo de memoria dinmica. Unidad 2.-Manejo de memoria.
  • Diapositiva 3
  • Manejo de memoria Todas las variables, arreglos y objetos en general tienen una duracin determinada durante el transcurso de un programa, esto quiere decir que son creados y destruidos de acuerdo a la ejecucin del programa. Existen 3 formas de utilizar la memoria para almacenar valores. MEMORIA: Es una zona de almacenamiento organizada en unidades individuales (celdas). La accin de guardar informacin en memoria se llama Acceso de escritura y a la accin de recuperar la informacin se le llama Acceso de lectura y estos accesos son coordinados por la Unidad de Control. Unidad II Manejo de memoria
  • Diapositiva 4
  • 1.-Memoria Esttica Son aquellas en las que se asigna una cantidad fija de memoria cuando se declara la variable. Se utiliza para las variables globales y las declaradas como estticas, tales objetos tienen asignada la misma direccin de memoria desde el comienzo hasta el final del programa. Variables globales Variables static
  • Diapositiva 5
  • 2.-Memoria Automtica Es la utilizada por los argumentos y las variables locales en una funcin o procedimiento, cada ejecucin de este crea tales objetos y son destruidos al salir de ellos. Argumentos Variables locales
  • Diapositiva 6
  • 3.-Memoria Dinmica Son aquellas cuya ocupacin de memoria puede aumentar o disminuir en tiempo de ejecucin. Es tambin llamado almacenamiento libre y en estos casos el programador solicita memoria para almacenar un objeto y es el responsable de liberar tal memoria para que pueda ser reutilizada por otros objetos. La operacin de reservar y liberar memoria para variables globales estticas o globales son realizadas de modo implcito por el programa, la nica que realiza el programador directamente es la de reservar memoria de forma dinmica.
  • Diapositiva 7
  • Memoria esttica: Es la memoria que se reserva en el momento de la compilacin antes de comenzar a ejecutarse el programa. Los objetos mantienen la misma localizacin en memoria durante todo el transcurso del programa. Los objetos administrados de este modo son variables globales, variables static de funciones y miembros static de clases y literales de cualquier tipo.
  • Diapositiva 8
  • Ejemplo 1: class CSimple { static void Main(string[] args) { int [] numeros=new int[] {1,2,3,4,5}; for (int i = 0; i < 5; i++) Console.WriteLine("Numeros {0}= {1}",i+1, numeros[i]); Console.ReadLine(); } Nota: En el ejemplo 1 se muestra la declaracin esttica de un arreglo de nmeros enteros y la de la variable i para controlar el ciclo for.
  • Diapositiva 9
  • Ejemplo 2 class CSimple { static int Funcion(int p, int q) { return (p + q); } static void Main(string[] args) { int Resultado = Funcion(7, 2); Console.WriteLine("El resultado es:{0}", Resultado); Console.ReadLine(); } Nota: En el ejemplo 2 se muestra la declaracin esttica de una funcin entera y de otra variable entera para guardar el resultado de la ejecucin de la funcin. El problema con la memoria esttica de memoria es que siempre se reserva antes de conocer los datos concretos del problema y esto origina reservar siempre un mximo de memoria que en la mayora de las veces no se va a necesitar.
  • Diapositiva 10
  • Memoria dinmica: La reserva de memoria dinmica se hace en tiempo de ejecucin despus de leer los datos y de conocer el tamao exacto del problema. Como consecuencia se adapta mucho mejor a las necesidades en cada caso. El sitio donde se almacenan los objetos se denominan en ingles heap o free store traducido como montculo o memoria libre, y el sitio preciso donde se encuentre depende del compilador y el tipo de puntero utilizado. La creacin y destruccin de los objetos est en manos del programador a travs de los operadores new y delete.
  • Diapositiva 11
  • Ventajas de utilizar memoria dinmica vs memoria esttica La memoria dinmica sirve para que los programadores se adapten siempre al tamao del problema que tienen que resolver sin desperdiciar recursos de memoria y esto se traduce en una mayor eficiencia en la ejecucin de los programas, las ventajas de utilizar memoria dinmica se valoran mejor en comparacin con la utilizacin de la reserva de la memoria esttica. Creacin del los Objetos Los objetos locales son creados al entrar en la funcin que los declara. Los globales son creados al iniciarse en programa. La memoria se reserva explcitamente con el operador new. Duracin de los objetos Los objetos locales se destruyen al salir de la funcin en que son creados. Los globales se destruyen al salir del programa. Los objetos son destruidos explcitamente con el operador delete. (En Java la funcin la realiza el recolector de basura automticamente).
  • Diapositiva 12
  • ndice de los Arreglos El valor del ndice debe ser un valor constante Ejemplo: int A [20]; El valor de un arreglo puede ser un valor de una variable, de modo que la cantidad de memoria reservado puede variar en tiempo de ejecucin. Ejemplo: int A = new int[variable];
  • Diapositiva 13
  • Ejemplos Extras de la aplicacin de memoria dinmica y esttica. Ejemplo Aplicacin Esttica public class Empleado { public string id; public string nombre; public Empleado () { } public Empleado(string nombre, string id) { this.nombre = nombre; this.id = id; } public static int ContadorEmpleado; //Aplicacion de memoria esttica public static int AgregarEmpleado() { return ++ContadorEmpleado; }
  • Diapositiva 14
  • class MainClass : Empleado { public static void Main() { Console.Write("Ingresa el nombre del empleado: "); string nombre = Console.ReadLine(); Console.Write("Ingresa el Id del empleado: "); string id = Console.ReadLine(); //Creando el objeto empleado: Empleado e =new Empleado(nombre, id); Console.Write("Ingresa el No. de empleados: "); string n = Console.ReadLine(); Empleado.ContadorEmpleado =Int32.Parse(n); Empleado.AgregarEmpleado(); //Nueva informacion: Console.WriteLine("Nombre: {0}", e.nombre); Console.WriteLine("ID: {0}", e.id); Console.WriteLine("Nuevo No. de empleados: {0}", Empleado.ContadorEmpleado); Console.ReadLine(); }
  • Diapositiva 15
  • Ejemplo Aplicacin Dinmica public class Persona { public string nombre; //constructor public Persona() { nombre ="Desconocido"; } //mtodo public void leerNombre(string nom) { nombre = nom; }
  • Diapositiva 16
  • class Program { static void Main(string[] args) { Persona persona1 =new Persona(); System.Console.WriteLine(persona1.nombre); persona1.leerNombre("Susana Davalos"); System.Console.WriteLine(persona1.nombre); persona1.leerNombre("Gisela Rios"); System.Console.WriteLine(persona1.nombre); persona1.leerNombre("Argelia Corona"); System.Console.WriteLine(persona1.nombre); Console.ReadLine(); }