¡GoConqr estrena diseño! Cuéntanos qué te parece.

Diapositivas

ASIGNACION DINAMICA DE MEMORIA

vaneruiz1496 Español 4 diapositivas

Diapositivas del conjunto (4)

  1. Asignación dinámica de memoria

    • 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)
    • Pie de imagen: RUIZ CASTAÑEDA INGRID VANESSA
  2. fundamentos teóricos

    • • 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.
  3. En la 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));
  4. Diapositiva 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().
    • EJEMPLO
    • main()
    • {
    • 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);
    • }

Información

Descripción
muestra las distintas formas en que definimos una biblioteca
Creado por
vaneruiz1496 · mar 2016
Actualizado
10 mar 2016
Visitas
23
Valoración

Escríbenos

¿Sobre qué es tu mensaje?

¿Qué te parece el nuevo diseño?

¿Te gusta?