You are on page 1of 6

Allocazione dinamica C++

Pasquale De Luca
March 2016

Contents
1 Introduzione

2 Allocazione dinamica in C
2.1 Allocazione array . . . . . . . . . . . . . . . . . . . . . . . . . . .

4
4

3 Allocazione dinamica in C++


3.1 Allocazione dinamica array . . . . . . . . . . . . . . . . . . . . .

5
5

4 Differenze tra malloc e new

Introduzione

Lallocazione della memoria in un programma `e un processo particolarmente importante se si vuole creare un software con unelevata efficienza. Sappiamo che
lefficienza di un software `e data dalla sua complessit`a computazionale,quindi
dal tempo che il programma impiega per eseguire le istruzioni computazionali, e questo tempo spesso pu`o dipendere anche dalle risorse utilizzate oltre al
linguaggio di programmazione utilizzato ed altri fattori non quantificabili.

Allocazione dinamica in C

Iniziamo spiegando cosa si intende per allocazione dinamica.


Quando dichiariamo una variabile che sia un numero o un array utilizziamo la
seguente sintassi:
int a =5;
Cos` dichiariamo una variabile intera a con valore uguale a 5 e in memoria
`e stato gi`
a instanziato allindirizzo di a il valore 5.
Se volessimo dichiarare a in modo dinamico bisogna utilizzare la notazione con
i puntatori, nel seguente modo:
int a ;
a =5; \\ a l l o c a z i o n e
f r e e ( a ) ; \\ d e a l l o c a z i o n e
N.B. Da notare che il valore alla variabile `e assegnato con la star avanti,
questo perch`e in assenza di essa viene intesa come variabile che contiene lindirizzo.
In questo modo la variabile a viene dichiarata in modo dinamico e in fine viene
invocata la funzione free per liberare lo spazio allocato.

2.1

Allocazione array

In C per allocare un array si pu`o utilizzare una delle funzioni dinamiche tra cui
:
malloc
calloc
realloc
Esempio Malloc
int a ;
a=m a l l o c ( s i z e o f ( int ) ) ;
free (a );
La differenza tra malloc e calloc `e che calloc inizializza lo spazio allocato
uguale a 0. E come utilizzare malloc per allocare pi`
u memset per inizializzare
lo spazio.

Allocazione dinamica in C++

Le dichiarazioni di variabili in C++ sono identiche al C, con lunica differenza


dellallocazione dinamica che si utilizza new per allocare e delete per deallocare.
int a ;
a=new int ; // a l l o c a z i o n e
delete a ; // d e a l l o c a z i o n e

3.1

Allocazione dinamica array

Esempio di codice per allocare un array in C++ con new:


int a r r ;
a r r=new int [ dim ] ; // A l l o c a z i o n e
d e l e t e [ ] a r r ; // D e a l l o c a z i o n e

Differenze tra malloc e new

Entrambe allocano nellheap ma new a differenza di malloc non utilizza sizeof,


e oltre ad allocare memoria esegue il casting e se riferito ad una classe ne chiama
il costruttore.
Entrambi sono soggetti a memory leak, cio`e un consumo inutile di memoria,
dovuto alle mancate deallocazioni delle variabili.
N.B. Quando un programma termina senza aver deallocato le variabili dinamiche
con free o delete, tali varabili vengono distrutte e i propri indirizzi sono irrangiungibili quindi non possono essere pi`
u deallocate.

You might also like