mercredi 25 juin 2014

Mémoire

En ce qui a trait à la mémoire au sein de l'ordinateur, rien de bien magique. Si
un ordi code pour la mémoire en 32 bits, on dispose au max de 1 milliard
de blocs avec un ordi de 4 Gigs de RAM, un portable actuel. Pour plus, Windows 8.1
code en 64 bits et peut dénombrer à la limite du RAM dont on dispose.

Sous UNIX, il faut réclamer la mémoire du HEAP à l'intérieur du programme: question
de simple politesse. Les chiffres à l'intérieur d'une function s'effacent dès que l'on quitte la function.
Pas vrai pour les char* (i.e. les strings),les structs définis globalement.... Il faut donner la permission à l'ordi de se servir dudit espace à d'autres fins.

Car c'est bien  d'un overwrite dont il est question. Un ordi n'efface jamais rien, il écrit
par-dessus. Et si on crée des variables sans les initialiser, on risqué d'avoir de très mauvaises
surprises à l'ouverture de notre programme.

Il convient aussi de se souvenir que l'ordi alloue une adresse simplement en indiquant
le premier bit de l'espace mémoire. Il lit ensuite jusqu'à la rencontre d'un NULL pour savoir que c'est terminé.

Ci-bas, j'ai un petit programme bien sage qui convertit la température Celsius en Fahrenheit.
Mais je n'ai pas donné de valeur initiale à mes variables. Je suis chanceuse, le debugger GDB
m'apprend que la valeur par défaut est zéro, signe que c'est un espace mémoire tout propre.
Cela aurait pû être bien different!!



 
Pour myCity défini à l'intérieur de main:


Pour myCity défini globalement:
 
J'ai créé une fuite de mémoire (memory leak)!!
 
 

Aucun commentaire: