GoConqr has a new look! Let us know what you think.

Slides

ASIGNACION DINAMICA DE MEMORIA

vaneruiz1496 Spanish 4 slides

ASIGNACION DINAMICA DE MEMORIA

Slides in this set (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)
    • Caption: 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. 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().
    • 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);
    • }

Information

Description
muestra las distintas formas en que definimos una biblioteca
Created by
vaneruiz1496
Views
23
Rating

Feedback

What is it about?

What do you think of the new look?

How do you like it?