|
C++ |
C |
||
|
Référence |
Valeur |
Référence indirect |
Valeur |
|
Le sous-pg utilise la variable du pg ppal |
Copie de la variable du pg ppal |
Passage de l'adresse par valeur grâce aux pointeurs |
Copie |
Ex :
echangeC(int* a, int* b)
echangeC++(int &a, int &b)
Allocation dynamique
A l'exécution d'une fonction : création des variables
locales dans la pile.
A la fin de l'exécution : elles sont dépilées.
|
exécutable |
|
données |
|
instructions |
|
pile |
Allocation statique d'un tableau : le compilateur
réserve la taille, qui est connue, avant l'exécution.
A l'exécution de l'exécutable : tout est chargé en mémoire.
Allocation dynamique : on
demande de réserver de la mémoire quand le pg tourne.
Tas = mémoire
disponible pour l'allocation dynamique.
Attn : quand on a plus besoin de cet espace mémoire, le
libérer !
Intérêt alloc dynq : pas de gaspillage d'espace
mémoire.
p = new
type-de-la-var-allouée;
Þ demande
d'allocation de mémoire pour une variable
p = new int (100)
;
Þ alloue un
entier de valeur 100 ([ ] pour un tableau)
si possible, retourne l'adresse de la var créée
si échec, retourne 0
tab
= new char [taille];
Þ alloue un
tableau de caractères
Attn : ne pas
oublier de tester si ya pas eu pb d'alloc
if(!p)
cerr<<"plus assez d'espace"<<endl;
#include <new.h>
void main () {
set_new_handler(&nom-fonction);
… }
Þ déclare
la fonction à appeler en cas de manque de mémoire dans le tas.
delete [ ]
nom-tab
Þ désalloue
le tableau tab
delete adresse-de-la-variable
Þ désalloue
la variable.