Professional Documents
Culture Documents
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())
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; }
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);
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.