27
2. Manejo de memoria 1. Manejo de memoria estática 2. Manejo de memoria dinámica

2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Embed Size (px)

Citation preview

Page 1: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

2.   Manejo de memoria

1. Manejo de memoria estática

2. Manejo de memoria dinámica

Page 2: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Introducción

• La administración 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 programación administra la memoria para cada programa en ejecución.

Page 3: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

• 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 del ejecución del programa

Page 4: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Asignación de Memoria Estática y Dinámica

• A la asignación de memoria para algunos elementos fijos del programa que es controlada por el compilador se le llama asignación de memoria estática.

• A la asignación y posible recuperación de memoria durante la ejecución de un programa y bajo su control, se le llama asignación de memoria dinámica.

Page 5: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Memoria Estática

• Define la cantidad de memoria necesaria para un programa durante el tiempo de compilación.

• El tamaño no puede cambiar durante el tiempo de ejecución del programa.

• Algunos lenguajes de programación utilizan la palabra static para especificar elementos del programa que deben almacenarse en memoria estática.

Page 6: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Memoria Estática

• Elementos que residen en memoria estática:– Código del programa– Las variables definidas en la sección principal del

programa, las cuales pueden solo cambiar su contenido no su tamaño.

– Todas aquellas variables declaradas como estáticas en otras clases o módulos.

• Estos elementos se almacenan en direcciones fijas que son relocalizadas dependiendo de la dirección en donde el cargador las coloque para su ejecución.

Page 7: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Método común de asignación de memoria

Memoria disponible Para el programa

Variables estáticas

Código del programa

Mapa de memoria

Dirección alta

Dirección baja

Page 8: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

El stack de ejecución

• Cada subprograma (procedimiento, función, método, etc.) requiere una representación de si 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.

Page 9: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

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 serán colocados en memoria estática?

Que elementos se almacenaran en el stack en tiempo de ejecución?

Page 10: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

• Es siempre posible, cuando se diseña un programa, conocer la cantidad de memoria necesaria para que este se ejecute correctamente?

Page 11: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

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.

• Almacena todos los elementos definidos con la palabra new en un programa.

Page 12: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Memoria Dinámica

• Las variables dinámicas son aquellas que crecen de tamaño o se reducen durante la ejecución de un programa.

• Estas se almacenan en un espacio de memoria llamado heap.

• El heap se localiza en la región de memoria que esta encima del stack.

• Algunos lenguajes de programación permiten que el programador asigne y desasigne manualmente la memoria. Java utiliza un recolector de basura.

Page 13: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Uso del heap

• Para usar el heap un programa requiere:– Una o mas variables que refieran el lugar donde

se encuentran las variables dinámicas.– Un método para obtener memoria (new)– Una forma de asignar la dirección de memoria a

alguna variable (identificador)– Una forma para referirse a la variable dinámica

Page 14: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Ejemplopublic 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=1void setx(int _x)String toString ()

punto1 punto2

x=5 y=5void setx(int _x)String toString ()

punto3

Metodos de instancia

Miembros de instancia

Punto

totalPuntos = 0 Miembros de clase

Page 15: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Liberación de memoria

• La memoria estática se libera cuando el programa finaliza su ejecución.

• La memoria dinámica se libera de dos formas:– Explicita. El programador decide cuando un elemento

debe ser eliminado de la memoria. El LP provee mecanismos para liberación de memoria.

– Implícita. El sistema decide que elementos deben ser eliminados para recuperar el espacio de memoria que ocupan. El sistema cuenta con un “recolector de basura”.

Page 16: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

The Garbage Collector

• Algunos lenguajes de programación requieren que el programador mantenga la información de todos los objetos creados en un programa para que estos puedan ser destruidos cuando ya no son requeridos en la ejecución.

• Este método para manejar la memoria puede resultar tedioso y propicio a errores.

• Java permite la creación de tantos objetos como sean necesarios sin tener que destriurlos explícitamente cuando ya no son requeridos.

• El medio ambiente de ejecución 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 automática, se ejecuta periódicamente durante la ejecución de un programa.

Page 17: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Ejemplo Como almacenar

Cadenas de Caracteres?

Page 18: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Se utilizan secuencias de bits para representar letras y otros símbolos. Alfabéticos Caracteres Dígitos Caracteres Especiales Caracteres de Control…

El numero de caracteres que se pueden representar depende de el numero de bits con que se represnta cada carácter. 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 concatenación de las hileras de bits que representan los caracteres individuales.

Cadenas de CaracteresCadenas de Caracteres

Page 19: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Una cadena de caracteres es una secuencia finita de 0 o más caracteres.

La longitud de la cadena de caracteres es el número de caracteres que contiene.– Cadena Vacía o Nula.- Cero caracteres.

Delimitadores: Comúnmente se usan “” o ‘’ dependiendo del lenguaje de programación.

Ejemplos:S1=“INSTITUTO” longitud = 9S2=“TECNOLOGICO DE CULIACAN” longitud = 23

Page 20: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Concatenación = Es la operación de unir 2 cadenas para formar una sola.

Ejemplo:S3 = S1 + “ ” + S2S3=“INSTITUTO TECNOLOGICO DE CULIACAN”Longitud de S3 = 33

Subcadenas = Se dice que y es subcadena de S si existe:

S = X + Y + ZDonde:X y/o Z pueden ser cadenas vacías:Si X es cadena vacía entonces Y es subcadena InicialSi Z es cadena vacía entonces Y es subcadena final

Page 21: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

Ejemplo:

S = “Estrutura de Datos”

“de” es subcadena de S

“Est” es subcadena inicial de S

“Datos” es subcadena final de S

Page 22: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

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 máximo fijo: Son cadenas de caracteres que contienen un máximo 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 máximo fijo: Son cadenas de caracteres que contienen un máximo 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.

Page 23: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

C PROGRAM PRINTING TWO INTEGERS IN INCREASING ORDERREAD *, J , KIF ( J.LE.K) THEN PRINT *,J,KELSE PRINT *,K,JENDIFSTOPEND

Ejemplo Almacenar un programa Ejemplo Almacenar un programa (Texto)(Texto)

Page 24: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

En estructuras de longitud fija:

C PROGRAM PRINTING ….

READ * , J , K ……

200 210 250

280 290 300

I F ( J . L E . K ) T H E N ……

360 370 380

440 ……………

Page 25: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

En estructuras de longitud variable con un máximo fijo:

*usando delimitador: $$

En estructuras de longitud variable con un máximo fijo:

*usando delimitador: $$

C PROGRAM PRINTING TWO IN… $$

READ *, J , K $$

IF (J.LE.K) THEN $$

END $$

………………

1

2

3

4

5

Page 26: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

En estructuras de longitud variable con un máximo fijo:

*usando longitud actual

En estructuras de longitud variable con un máximo fijo:

*usando longitud actual

C PROGRAM … ORDER

READ *, J , K

IF (J.LE.K) THEN

END

551821

4

………………

Page 27: 2. Manejo de memoria 1.Manejo de memoria estática 2.Manejo de memoria dinámica

En estructuras Enlazadas:

C PROGRAM …..Cadena Liga

Inicio

READ *, J , K

IF (J.LE.K) THEN

END

……