APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

Puntatori e gestione dinamica della RAM
Uso avanzato di C.
Laboratorio di Linguaggi lezione V Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione VII: puntatori 3/3 Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso.
Laboratorio di Linguaggi lezione VIII B: Puntatori e Pasticci Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di.
Laboratorio di Linguaggi lezione IV Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
APPUNTI SUL LINGUAGGIO C
15 maggio 2002 Avvisi: Ultima lezione: mercoledì 29 maggio II Esonero: mercoledì 5 giugno, ora da stabilire.
Unità Didattica 3 Linguaggio C
C. Gaibisso Programmazione di Calcolatori Lezione XVI Allocazione dinamica della memoria Programmazione di Calcolatori: allocazione dinamica della memoria.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Fondamenti di Informatica A - Massimo Bertozzi I PUNTATORI.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
Fondamenti di Informatica A - Massimo Bertozzi LE RAPPRESENTAZIONI CONCATENATE.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Allocazione dinamica VLA, malloc() e dintorni. Rappresentazione di sequenze.... È molto comune dover rappresentare sequenze di elementi tutti dello stesso.
Gestione della memoria
Elementi di Informatica
Struct, enum, Puntatori e Array dinamici
Il linguaggio C Strutture Moreno Marzolla
10. Programmazione Ricorsiva Ing. Simona Colucci
Process synchronization
Process synchronization
Organizzazione fisica
I FILES AD ACCESSO SEQUENZIALE
Ambienti di Programmazione per il Software di Base
Vettori dinamici Definiremo la classe vector.
Programmazione e Laboratorio di Programmazione
Algoritmi e Strutture Dati
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C Strutture Dati e Puntatori
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Introduzione agli Algoritmi e alle Strutture Dati
Programmazione e Laboratorio di Programmazione
Alberi n-ary Lezioni di C.
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
Process synchronization
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Implementazioni di Liste Concatenate
APPUNTI SUL LINGUAGGIO C Esercizi su File e Alberi Binari
Le stringhe in C++ Laboratorio 26 Aprile Dott. Serena Villata
Algoritmi e Strutture Dati
Lucidi della Pof.ssa Pazienza
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C
LINGUAGGIO C Alberi e livelli
APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia
Programmazione e Laboratorio di Programmazione
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
APPUNTI SUL LINGUAGGIO C Alberi Binari – primi esercizi
APPUNTI SUL LINGUAGGIO C
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Algoritmi e Strutture Dati
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C Allocazione dinamica della memoria

Allocazione dinamica della memoria L'allocazione dinamica della memoria consente una efficace gestione della memoria a tempo di esecuzione. Si usa generalmente per la gestione di dati di cui non è nota a priori la dimensione. In ANSI C ci sono quattro funzioni per gestire dinamicamente la memoria: • malloc • calloc • realloc • free Queste funzioni sono contenute nella libreria: stdlib.h

Allocazione dinamica della memoria Operativamente la gestione avviene mediante l’uso di puntatori e della costante simbolica predefinita NULL (che vale 0 ed è definita nella libreria stdio.h). La costante NULL serve a gestire la situazione in cui un puntatore non punta a nessuna locazione di memoria.

void *malloc( size_t size ) Alloca in maniera dinamica una zona di memoria della dimensione specificata in numero di byte. Restituisce un puntatore di tipo void all'area di memoria allocata. Se non c'è sufficiente quantità di memoria, restituisce NULL. Viene sempre seguita da una operazione di "casting" per restituire un puntatore del tipo desiderato. void *malloc( size_t size )

size_t sizeof(<variabile o tipo>) Malloc Si usa in genere insieme alla funzione C sizeof che restituisce la dimensione in numero di byte di una variabile o di un tipo. size_t sizeof(<variabile o tipo>)

Malloc #include <stdio.h> #include <stdlib.h> ... typedef struct { char nome[20]; char cognome[20]; int telefono; } persona; .... /* definizione puntatori */ int *p, *q; persona *tizio;

/* allocazione dinamica di memoria */ p=(int*)malloc(sizeof(int)); q=(int*)malloc(sizeof(*q)); tizio=(persona*)malloc(sizeof(persona)); if (tizio==NULL) printf("Out of memory"); Ho allocato una cella di memoria per contenere un intero Ho allocato una cella di memoria per contenere un intero Ho allocato una cella di memoria per contenere una struttura di tipo persona

Malloc /* allocazione dinamica di memoria */ p=(int*)malloc(sizeof(int)); q=(int*)malloc(sizeof(*q)); tizio=(persona*)malloc(sizeof(persona)); if (tizio==NULL) printf("Out of memory"); ... /* uso delle variabili allocate */ scanf("%d",p); scanf("%d",q); printf("%d\n",*p + *q); tizio->telefono=1733; printf("%d",tizio->telefono);

Calloc e Realloc La calloc alloca in maniera dinamica una zona di memoria per memorizzare n oggetti della dimensione specificata. La realloc rialloca uno spazio di memoria precedentemente allocato con una calloc o malloc (si usa in genere per modificare dimensione e/o tipo di un'area di memoria già allocata).

Calloc e Realloc void *calloc( size_t n_elem, size_t elem_size ) In entrambi i casi viene restituito un puntatore di tipo void all'area di memoria (ri)allocata. Se non c'è sufficiente quantità di memoria, viene restituito NULL. void *calloc( size_t n_elem, size_t elem_size ) void *realloc( void *p, size_t size )

Calloc e Realloc ... typedef struct { char nome[20]; char cognome[20]; int telefono; } persona; int matricola; } studente; .... persona *pp, *grp; studente *ps;

/* allocazione dinamica di una persona */ pp=(persona*)malloc(sizeof(persona)); pp->telefono=77; /* allocazione dinamica di 10 persone */ grp=(persona*)calloc(10,sizeof(persona)); if (!grp) printf("Out of memory"); Ho allocato 10 celle di memoria che conterranno strutture di tipo persona.

/* riallocazione dinamica di pp */ ps=(studente*)realloc(pp,sizeof(studente)); ps->matricola=888; printf("%d%d",ps->matricola,ps->telefono); ... Ho riallocato la cella di memoria che conteneva una struttura di tipo persona (puntata da pp).

Free void *free( void *p ) Rilascia una zona di memoria precedentemente allocata con una malloc, una calloc o una realloc. N.B.: andrebbe sempre usata prima della fine del programma su ogni variabile allocata dinamicamente. void *free( void *p )

Free ... typedef struct { char nome[20]; char cognome[20]; int telefono; } persona; .... /* definizione puntatori */ int *p, *q; persona *pp, *grp;

Free /* allocazione dinamica di memoria */ p=(int*)malloc(sizeof(int)); q=(int*)malloc(sizeof(*q)); pp=(persona*)malloc(sizeof(persona)); grp=(persona*)calloc(10,sizeof(persona)); ... /* rilascio della memoria allocata */ free(p); free(q); free(pp); free(gpr);

Le strutture dati Fino ad ora sono state introdotte strutture dati statiche (dimensione fissa a priori come vettori e record); in C ci sono strumenti per creare e gestire strutture dati dinamiche, la cui dimensione è una variabile gestita dall’utente. Un uso combinato di record e puntatori e una sapiente gestione dell’allocazione dinamica della memoria, permettono la costruzione e gestione di realtà complesse, di tipi di dato astratto.

Le Liste Concatenate Una lista concatenata è una collezione lineare di strutture connesse da puntatori, detti link (anelli o collegamenti), da cui il termine concatenata. Elemento Elemento Elemento

Le Liste Concatenate I nodi di una lista sono strutture ricorsive: una struttura contenente un membro di tipo puntatore, che fa riferimento a una struttura dello stesso tipo di quella in cui è contenuto. Elemento

Le Liste Concatenate Ci saranno sue nodi particolari: un puntatore al primo elemento e l’ultimo nodo punterà a NULL. Elemento

Le Liste Concatenate Ci saranno sue nodi particolari: un puntatore al primo elemento e l’ultimo nodo punterà a NULL. NULL Elemento

APPUNTI SUL LINGUAGGIO C Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C FINE