ASIGNACION DINAMICA DE MEMORIA

Descrição

muestra las distintas formas en que definimos una biblioteca
vaneruiz1496
Slides por vaneruiz1496, atualizado more than 1 year ago
vaneruiz1496
Criado por vaneruiz1496 mais de 8 anos atrás
13
0

Resumo de Recurso

Slide 1

    Asignación dinámica de memoria 
    Se ha tratado cómo “conseguir” nuevas posiciones de memoria (ateniéndose al lenguaje de la parte algorítmica: cómo funciona el Módulo de Gestión de la Asignación Dinámica de C)
    Rubrica: : RUIZ CASTAÑEDA INGRID VANESSA

Slide 2

    • En muchas ocasiones no es posible conocer de antemano la cantidad de variables necesarias para un programa computacional. • Existen aplicaciones que requieren de enormes cantidades de arreglos o datos por momentos breves en el funcionamiento del mismo, por lo que no es viable declarar de antemano a estas como variables, globales o locales de una función. Lo anterior implica emplear funciones de ANSI C que permiten reservar memoria de manera dinámica y ampliarla, reducirla o destruirla en tiempo de ejecución. • El manejo de memoria dinámica es la base del poder del lenguaje C y le da la capacidad de crear programas complejos que emplean grandes cantidades de memoria y los maneja de manera eficiente.
    fundamentos teóricos 

Slide 3

    En la <stdlib.h> están definidas: 
    1 • void *calloc(size_t nobj, size_t size) calloc obtiene (reserva) espacio en memoria para alojar un vector (una colección) de nobj objetos, cada uno de ellos de tamaño size. Si no hay memoria disponible se devuelve NULL.Ejemplo: char * c; c = (char *) calloc (40, sizeof(char));
    2• void *malloc(size_t size) malloc funciona de forma similar a calloc salvo que: a) no inicializa el espacio y b) es necesario saber el tamaño exacto de las posiciones de memoria solicitadas. El ejemplo anterior se puede reescribir: char * c; c = (char *) malloc (40*sizeof(char));

Slide 4

    • void *realloc(void *p, size_t size) realloc cambia el tamaño del objeto al que apunta p y lo hace de tamaño size. El contenido de la memoria no cambiará en las posiciones ya ocupadas. Si el nuevo tamaño es mayor que el antiguo, no se inicializan a ningún valor las nuevas posiciones.EJEMPLO:#define N 10 #include main(){ char c, *cambiante; int i; i=0; cambiante = NULL; printf("\nIntroduce una frase. Terminada en [ENTER]\n"); while ((c=getchar()) != '\n') { if (i % N == 0){ printf("\nLlego a %d posiciones y pido hasta %d", i, i+N); cambiante=(char *)realloc((char *)cambiante,(i+N)*sizeof(char)); if (cambiante == NULL) exit(-1); } /* Ya existe suficiente memoria para el siguiente carácter*/ cambiante[i++] = c; } /* Antes de poner el terminador nulo hay que asegurarse de que haya suficiente memoria */ if ((i % N == 0) && (i != 0)){ printf("\nLlego a %d posiciones y pido hasta %d", i, i+N); cambiante=realloc((char *) cambiante, (i+N)*sizeof(char)); if (cambiante == NULL) exit(-1); } cambiante[i]=0; printf ("\nHe leido %s", cambiante); }  
    • void free(void *p) free() libera el espacio de memoria al que apunta p. Si p es NULL no hace nada. Además p tiene que haber sido “alojado” previamente mediante malloc(), calloc() o realloc(). EJEMPLOmain(){ char uno[20], *dos; printf ("\nDame una cadena:"); gets(uno); copia2(uno, &dos); /*Inicialmente dos no apunta a ningún sitio*/ /*En copia2 se modificará el valor de dos */ printf ("\nLa copia de %s\n es %s\n", uno, dos); } 

Semelhante

Comunidades Autónomas de España y sus Capitales
maya velasquez
Países de Latinoamérica y sus Capitales
maya velasquez
Provincias de España
Diego Santos
BANDERAS de EUROPA...
JL Cadenas
Paisajes de España
Joaquín Ruiz Abellán
Capas de la Tierra
Diego Santos
Los ríos y aguas de España
Remei Gomez Gracia
El Relieve de España
Remei Gomez Gracia
GED en Español: Todo lo que necesitas saber
Diego Santos
Historia Contemporánea: Los fascismos
María Salinas