Sei sulla pagina 1di 4

Asignacin dinmica

Existen dos mtodos para guardar informacin de un programa en la memoria del


computador.
El primero, es la que utiliza para las variables globales y locales. Con las globales
se asigna un rea de almacenamiento fijo durante toda la ejecucin del programa en
el espacio (variables globales), mientras que las locales son almacenadas en el
espacio (pila).
El segundo, consiste en asignar el espacio de memoria disponible. Localizado entre
el cuerpo del programa, incluyendo el espacio de las variables locales y el rea de
pila como se muestra a continuacin.
rea del programa
Variables globales
heap
Memoria libre para asignacin

Crece hacia abajo

Pila (aqu van las locales)

Direccin de crecimiento

Direccin de crecimiento

La pila crece hacia abajo a medida que el programa la utiliza. La computadora toma la
memoria para asignarla bajo el segundo mtodo desde la zona de memoria libre,
empezando justo debajo de las variables globales y creciendo hacia la pila.
La asignacin dinmica de memoria consiste en asignar la cantidad de memoria necesaria
para almacenar un objeto durante la ejecucin del programa, en vez de hacerlo en el
momento de compilacin del mismo (programa).

Funciones utilizadas en la asignacin dinmica:


Para trabajar con asignacin dinmica se requiere incluir la librera <stdlib.h>.
malloc( ): Esta localiza un rea de memoria disponible en la zona de memoria libre para
asignacin que satisfaga el pedido realizado.
Cuando se usa la funcin malloc() la memoria no es inicializada a cero o borrada.
Formato:
p = malloc (t);
p: puntero al primer byte del bloque de la memoria que se asignar, en caso
contrario devuelve un puntero NULL (contiene 0).

t: cantidad, en bytes que se solicitan.


Ejemplo:
char *cp;
cp = (char *) malloc(100);

// pide 100 bytes

es un casting o conversin a puntero char


Ejemplo:
int *p;
p=(int *) malloc (sizeof (int));

// pide 2 bytes

Ejemplo:
int *p;
p=(int *) malloc (n * sizeof (int));

cantidad de
elementos

multiplica

/7si no se especifica el tipo de dato asume 1 byte


//es para char

para indicar el nmero de bytes asociado


con una estructura de datos

estructura
Cantidad de bytes = cantidad

2 bytes para un entero

calloc( ): Esta funcin asigna espacio de memoria, pero cada espacio es inicializado en
cero (o). El espacio requerido debe ser inferior a 64k.
Formato:
p=calloc(n, t);
p: puntero al primer byte de la regin de la memoria que se asignar, en caso
contrario devuelve un puntero NULL.
n: cantidad de elementos
t: cantidad, en bytes que se solicitan.

Ejemplo:
int *p;
p=(int *) calloc (40,sizeof(int));

realloc( ): Cambia el tamao de un bloque de memoria previamente asignado.


Puede devolvernos la zona de memoria solicitada en otra posicin o la misma.
Se puede agrandar o achicar el bloque.
Formato:
p=realloc(p,t);
p: es un puntero que apunta al comienzo del bloque.
Si p es NULL, este se comporta igual que el malloc ( ).
Si p no es NULL, entonces tiene que ser un puntero devuelto por las funciones
malloc( ), calloc( ) o por la propia funcin realloc( ). El bloque ha podido,
incluso, ser liberado por la funcin free().
t: tamao nuevo solicitado del bloque en bytes. El contenido del bloque no
cambia en el espacio conservado.
Si originalmente se pide 3 y luego hago un realloc de 5 entonces se dan 5
celdas mas, quedando 8 en total.
Ejemplo:
int *p;
p= (int *) malloc (3 * sizeof (int));
p= (int *) realloc (p, 5 * sizeof (int));

free ( ): Devuelve al sistema la memoria asignada para su posterior reutilizacin. Libera un


bloque asignado por las funciones malloc( ), calloc( ), o realloc( ).
Formato:
free(p);
p: debe ser un puntero vlido, ya que se podra destruir el sistema de
administracin de memoria libre.

Definicin de un arreglo en trmino de variable puntero.


Arreglo esttico
int x[5];

Arreglo esttico trabajado como puntero

Arreglo dinmico como puntero

int x[5];
int *p=x;

int *x;
x=(int *)malloc(5 *sizeof(int))

o se puede accesar como


*x

Potrebbero piacerti anche