Professional Documents
Culture Documents
La mmoire
La pile et le tas
la pile (stack)
le tas (heap)
Cours C/C++
tvaira@free.fr v0.1
2 / 13
La mmoire
La pile (stack)
Cours C/C++
tvaira@free.fr v0.1
3 / 13
La mmoire
Le tas (heap)
Cours C/C++
tvaira@free.fr v0.1
4 / 13
La mmoire
La taille de la pile tant limite (ici 8Mo), cela peut provoquer des
crasements de variables et surtout des "Erreur de segmentation" en cas
de dpassement. Il est videmment recommand dallouer dans le tas les
"grosses" variables sous peine de surprise !
Cours C/C++
tvaira@free.fr v0.1
5 / 13
Allocation dynamique
malloc et free
Lallocation dune nouvelle zone mmoire se fait dans un endroit
particulier de la mmoire appele le tas (heap).
Elle se fait par la fonction malloc : void *malloc(size_t
taille) ;
Largument transmis correspond la taille en octets de la zone
mmoire dsire.
La valeur retourne est un pointeur void * sur la zone mmoire
alloue, ou NULL en cas dchec de lallocation.
Si vous devez redimensionner un espace mmoire qui a t allou
dynamiquement, il faudra utiliser la fonction realloc().
La mmoire alloue doit, un moment ou un autre, tre libre.
Cette libration mmoire se fait par la procdure free : void
free(void *pointeur) ;
tv (BTS IRIS Avignon)
Cours C/C++
tvaira@free.fr v0.1
6 / 13
Allocation dynamique
Une fois quune zone mmoire a t libre, il ne faut sous aucun prtexte y accder, de
mme quil ne faut pas tenter de la librer une seconde fois.
tv (BTS IRIS Avignon)
Cours C/C++
tvaira@free.fr v0.1
7 / 13
Allocation dynamique
Cours C/C++
tvaira@free.fr v0.1
8 / 13
Allocation dynamique
new et delete
Cours C/C++
tvaira@free.fr v0.1
9 / 13
Allocation dynamique
Cours C/C++
tvaira@free.fr v0.1
10 / 13
Allocation dynamique
Cours C/C++
tvaira@free.fr v0.1
11 / 13
Allocation dynamique
Cours C/C++
tvaira@free.fr v0.1
12 / 13
Allocation dynamique
Fuite de mmoire
Lallocation dynamique dans le tas ne permet pas la dsallocation
automatique.
Chaque allocation avec "new" doit imprativement tre libre
(dtruite) avec "delete" sous peine de crer une fuite de mmoire.
La fuite de mmoire est une zone mmoire qui a t alloue dans le
tas par un programme qui a omis de la dsallouer avant de se
terminer. Cela rend la zone inaccessible toute application (y compris
le systme dexploitation) jusquau redmarrage du systme. Si ce
phnomne se produit trop frquemment la mmoire se remplit de
fuites et le systme finit par tomber faute de mmoire.
Ce problme est vit en Java en introduisant le mcanisme de
"ramasse-miettes" (Garbage Collector ).
tv (BTS IRIS Avignon)
Cours C/C++
tvaira@free.fr v0.1
13 / 13