Java

Solo disponible en BuenasTareas
  • Páginas : 7 (1657 palabras )
  • Descarga(s) : 10
  • Publicado : 20 de agosto de 2010
Leer documento completo
Vista previa del texto
ASIGNACION DINAMICA MEMORIA
• Estructuras Estáticas:
Su tamaño no varía en tiempo de ejecución
• Vectores.
• Tablas
• Registros
• Estructuras Dinámicas
Su tamaño puede variar en tiempo de ejecución
• Vectores y cadenas dinámicas
• Listas
• Pilas
• Colas
• La asignación dinámica de memoria consiste en reservar sólo la memoria necesaria en cada momento (por eso el tamaño de lasestructuras variará)
• No será necesario establecer un límite máximo para la estructura, ya que irá creciendo o decreciendo a medida que se vaya necesitando.
• Las estructuras dinámicas se apoyan en el uso
de punteros.

Al tratar con memoria dinámica tendremos que:
1. Reservar la memoria que necesitemos.
2. Hacer uso de la Estructura de Datos Dinámica (cuyo
tamaño podrá ir variando)
3. Liberar lamemoria reservada:
Cuando no necesitemos más ese espacio de memoria hay
que indicarle al S.O. que esta zona de memoria puede quedar
libre para ser utilizada por otro programa.
NOTA: En C siempre es necesario liberar la memoria dinámica. En
otros lenguajes (p.ejem JAVA) esto se hace de forma automática a
través de un proceso recolector de basura (Garbage Collector)

2. Funciones para laasignación dinámica de memoria
(Se encuentran en la librería stdlib.h)
Función malloc: void* malloc (numb)
– Asigna un espacio de memoria de tamaño numb bytes y
devuelve la dirección de comienzo.
– Si no hay espacio suficiente devuelve el puntero a NULL
– El puntero devuelto es de tipo “no especificado” (void *)
por lo que habrá que realizar una conversión de tipos
explícita
– La función noinicializa el espacio de memoria

Ejemplo uso malloc
int * p;
p=(int *) malloc (4* sizeof(int));
if (p== NULL)
printf(“No hay memoria”);
else
{
//Tratamiento de esa zona
//Liberar
}
p
1006
1006
Memoria
dinámica

Función calloc
void* calloc (nobj,tam)
– Asigna un espacio de memoria de tamaño nobj* tam
bytes y devuelve la dirección de comienzo.
– Si no hay espacio suficientedevuelve el puntero a
NULL
– El puntero devuelto es de tipo “no especificado” (void
*) por lo que habrá que realizar una conversión de tipos
explícita
– La función inicializa el espacio de memoria a 0.

Ejemplo uso calloc
int * p;
p=(int *) calloc (4,sizeof(int));
if (p== NULL)
printf(“No hay memoria”);
else
{
//Tratamiento de esa zona
//Liberar
}
p
1006
1006
Memoria
dinámica00
0 0

Función realloc
void* realloc (void *,nb)
– Permite redimensionar la zona de memoria que se ha reservado con
calloc o malloc. Reseva nb bytes
– Se utiliza para reservar más o menos memoria, según se vaya
necesitando en cada caso
– Si no hay espacio suficiente devuelve el puntero a NULL
– El puntero devuelto es de tipo “no especificado” (void *) por lo
que habrá que realizar unaconversión de tipos explícita
– Si el espacio es mayor al anterior la función no inicializa el espacio
de memoria extra.
– Esta operación es muy costosa, por lo que debe limitarse su uso

Ejemplo uso realloc
int * p;
p=(int *) malloc (4*sizeof(int));
if (p== NULL)
printf(“No hay memoria”);
else
{
//Tratamiento de esa zona
p=(int *)realloc(p,6*sizeof(int));
//Liberar
}
p
1006
1006Memoria
dinámica
anterior
654
3
3
54
2042
6 Nueva
memoria
dinámica
2042
Función free
void free ( void *)
• Libera el espacio de memoria asignado mediante
las funciones calloc, malloc, realloc
• De esta forma se indica al S.O. que no se volverá a
necesitar esta zona de memoria y que queda libre
int * p;
p= (int *) malloc (4* sizeof(int));
.......
free (p

Polimorfismo
Elconcepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a Objetos, las mismas raíces de la palabra pueden ser una fuerte pista de su significado: Poli = Multiple, morfismo= Formas , esto implica que un mismo Objeto puede tomar diversas formas.
A través del concepto de Herencias ("Inheritance") es posible ilustrar este comportamiento:
|
El poder manipular un...
tracking img