You are on page 1of 12

Ma.

Gracia Montalvo Montero Lunes (CC5) : 10:30 11:50 y 12:00 13:20 Mircoles (CC5) : 7:30 8:50 y 9:00 10:20 mg.montalvo@uady.mx Cubculo EA-5

PROGRAMACIN

Memoria Esttica
Cuando se utilizan variables globales o locales se almacenan en una seccin de la memoria conocida como pila (stack). Se definen cuando se compila el programa, es decir, se reserva memoria para las variables declaradas en posiciones fijas de memoria y su tiempo de vida es desde el inicio hasta la finalizacin de la ejecucin del programa.

Memoria Dinmica
Cuando no es posible conocer de forma anticipada a la ejecucin cuanta memoria reservar, se asigna memoria en el momento de ejecucin (memoria dinmica) Estas localidades de memoria se localizan en una seccin conocida como montculo (heap) con funciones de C (malloc(),free(), realloc(), calloc())

Mapa de memoria de un programa

Montculo Memoria libre para asignacin dinmica Segmento de Pila Datos no Inicializados Datos Inicializados Segmento de cdigo #n Segmento de cdigo #2 Segmento de cdigo #1 En C las funciones malloc(), realloc(), calloc(), free() asignan y liberan memoria del montculo

Funcin malloc()
Es la forma habitual de C para obtener bloques de memoria. Sintaxis:
tipo *puntero; puntero = (tipo*)malloc(tamao en bytes) La funcin devuelve la direccin de la variable asignada dinmicamente, el tipo que devuelve es void

Ejemplo
long *p; p = (long*)malloc(32); int *r; r =(int*)malloc(10*sizeof(int));

Ejemplo: Reserva memoria para una cadena de caracteres y revisa si la asignacin es correcta.
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> int main(){ char cad[121], *ptr; int lon; puts("\nIntroducir linea de texto"); gets(cad); lon = strlen(cad); ptr = (char*)malloc((lon+1)*sizeof(char)); if(ptr == NULL){ puts("Error en la asignacion"); return -1; } strcpy(ptr, cad); printf("ptr=%s", ptr); free(ptr); getch(); return 0; }

(eef65) ptr (eef65) Memoria reservada por malloc() (10n+1)

Liberacin de Memoria
Cuando se ha terminado de utilizar un bloque de memoria previamente asignado por malloc() u otras funciones de asignacin, se puede liberar el espacio de memoria y dejarlo disponible para otros usos. La funcin free() libera espacios de memoria reservados dinmicamente.
Sintxis void free(puntero)

Ejemplos
int *ad; ad = (int *)malloc(sizeof(int)); free(ad); int *adc; adc = (char *)malloc(1000*sizeof(char)); free(adc);

Reasignacin de Memoria Dinmica


Cuando se requiere de mayor cantidad de memoria en un bloque asignado previamente con malloc() o calloc()se utiliza la funcin realloc() Sintaxis:
puntero = realloc(puntero a bloque, puntero total del nuevo bloque)

Ejemplo: Reservar memoria para una cadena y a luego, ampliar para otra cadena ms larga.
#include<stdlib.h> #include<string.h> int main(){ char *cadena; int tam; tam=(strlen("Primavera")+1)*sizeof(char); cadena=(char*)malloc(tam); strcpy(cadena,"Primavera"); puts(cadena); tam+=(strlen(" en Marzo\n")+1)*sizeof(char); cadena = (char*)realloc(cadena, tam); strcat(cadena, " en Marzo\n"); puts(cadena); free(cadena); getch(); return 0; }

Referencias
Programacin en C. Metodologa, algoritmos y estructuras de datos. 2da Edicin. Luis Joyanes Aguilar.

You might also like