Está en la página 1de 27

2.

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

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.

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

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.

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.

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.

Mtodo comn de asignacin de


memoria
Mapa de memoria
Memoria disponible
Para el programa
Variables estticas
Cdigo del programa

Direccin alta
Direccin baja

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.

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?

Es siempre posible, cuando se disea un


programa, conocer la cantidad de memoria
necesaria para que este se ejecute
correctamente?

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.

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.

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

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+);
}
}

punto1

Miembros
de instancia
Metodos de
instancia

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);
}
}

punto3

x=2
y=1
void setx(int _x)
String toString ()

punto2

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

Punto
Miembros
de clase

totalPuntos = 0

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.

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.

Ejemplo
Como almacenar
Cadenas de Caracteres?

Cadenas de Caracteres
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.

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 programacin.
Ejemplos:
S1=INSTITUTO
longitud = 9
S2=TECNOLOGICO DE CULIACAN
longitud = 23

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

Ejemplo:
S = Estrutura de Datos
de es subcadena de S
Est es subcadena inicial de S
Datos es subcadena final de S

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.

Ejemplo Almacenar un programa


(Texto)
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

En estructuras de longitud fija:

200

210
250
PROGRAM PRINTING .

C
280
READ
360

290
* , J , K
370

I F(J.LE.K) THEN
440

300

380

En estructuras de longitud variable con un


mximo fijo:
*usando delimitador: $$

1
2
3
4
5

PROGRAM PRINTING TWO IN $$


READ *, J , K $$
IF (J.LE.K) THEN $$

END $$

En estructuras de longitud variable con un


mximo fijo:
*usando longitud actual

5
5
1
8
2
1

PROGRAM ORDER
READ *, J , K
IF (J.LE.K) THEN

END

En estructuras Enlazadas:
Cadena

Inici
o

PROGRAM ..
READ *, J , K
IF (J.LE.K) THEN

END

Liga