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.