Memoria estática versus dinámica con Estructuras

  • Published on
    03-Jan-2016

  • View
    33

  • Download
    3

Embed Size (px)

DESCRIPTION

Memoria esttica versus dinmica con Estructuras. Memoria dinmica. Qu hacer cuando las variables declaradas son insuficientes o cuando no se conoce anticipadamente cuanto almacenamiento ser requerido por el programa?. 1. Se crea una variable de tipo puntero. - PowerPoint PPT Presentation

Transcript

  • Memoria esttica versus dinmicaconEstructuras

  • Memoria dinmicaQu hacer cuando las variables declaradas son insuficientes o cuando no se conoce anticipadamente cuanto almacenamiento ser requerido por el programa?1. Se crea una variable de tipo puntero.2. Se le pide al sistema operativo que asigne ms memoria.3. El sistema operativo retorna la direccin a la memoria asignada.4. Si la memoria asignada, no se usar ms, se puede devolver al sistema operativo.

  • Memoria esttica/dinmica 1struct str { int x; struct str *p;};main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x;}

    bNULLNmero de bytes que usauna variable de este tipo

  • Memoria esttica/dinmica 2struct str { int x; struct str *p;};main(){// se crea la variable estructurada estatica, "a" que tiene memoria asignada,// la relacion entre el nombre "a" y la memoria asignada es permanente: struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x;}

    bNULL

  • Memoria esttica/dinmica 3struct str { int x; struct str *p;};main(){ struct str a;// se crea la variable de tipo puntero "b" para apuntar a variables estructuradas,// no hay memoria asignada de tipo estructurada, "b" apunta a nada: struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x;}

    xpa

  • Memoria esttica/dinmica 4struct str { int x; struct str *p;};main(){ struct str a; struct str *b=NULL;// se puede modificar u obtener el contenido de los campos de la variable "a",// para ello se debe usar "." seguida del nombre del campo: a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x;}

    xpabNULL55

  • Memoria esttica/dinmica 5struct str { int x; struct str *p;};main(){ struct str a; struct str *b=NULL; a.x=55;// se pide, al sistema operativo, memoria para una variable estructurada,// la variable puntero "b" es usada para almacenar la direccion de la nueva// memoria devuelta, esto significa que b queda apuntando a esta nueva// variable estructurada: b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x;}

    xpa55bNULL

  • bNULLMemoria esttica/dinmica 6struct str { int x; struct str *p;};main(){ struct str a; struct str *b=NULL; a.x=55;// se pide, al sistema operativo, memoria para una variable estructurada,// la variable puntero "b" es usada para almacenar la direccion de la nueva// memoria devuelta, esto significa que b queda apuntando a esta nueva// variable estructurada: b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x;}

    xpa55

  • Memoria esttica/dinmica 7struct str { int x; struct str *p;};main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str));// para acceder a los campos de la variable estructurada se debe usar "->" // en vez de .: b->x=66; a.x=a.x+b->x;}

    xpabNULL55xp66

  • Memoria esttica/dinmica 8struct str { int x; struct str *p;};main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str));// para acceder a los campos de la variable estructurada se debe usar "->" // en vez de .: b->x=66; a.x=a.x+b->x;}

    xpabNULL121xp66

  • Memoria esttica/dinmica 9struct str { int x; struct str *p;};main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x;// si la variable de tipo puntero se hace apuntar a otra variable estructurada// por ejemplo a "a", la variable estructurada, pedida en forma dinamica,// queda sin la posibilidad de ser usada por el programa: b=&a;}

    xpaNULL121xp66b

  • struct str { int x; struct str *p;};main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x;// la forma correcta es devolver dinamicamente la memoria: free(b); b=&a;}

    xpa55bMemoria esttica/dinmica 10

  • struct str { int x; struct str *p;};main(){ struct str a; struct str *b=NULL; a.x=55; b=(struct str *)malloc(sizeof(struct str)); b->x=66; a.x=a.x+b->x;free(b); b=&a;// NO es necesario declarar una variable estructurada como a para formar una lista}

    xpa55Memoria esttica/dinmica 11

  • struct str { int x; struct str *p;};main(){ struct str *b=NULL;

    // BASTA con declarar una variable tipo puntero a estructur como b y usar malloc y free// si el puntero tiene asignado el valor NULL, se dice que apunta a NULL (nada)// si el valor del puntero es NULL, se dice que la lista est vaca}

    Memoria dinmica 1NULL

Recommended

View more >