Mémoire - introduction    Enregistrer au format PDF

Le terme "mémoire" peut paraître très compliqué de prime abord, mais rappellez-vous qu’au final, un ordinateur n’est rien de plus qu’un calculateur géant.


par S3cur3D

Ainsi, la mémoire est simplement un ensemble de bytes (ou octets) qui permettent de stocker temporairement des valeurs et qui sont repérés par des adresses. Ces valeurs stockées sont donc accessibles par ces adressess et n’importe quel octet à n’importe quelle adresse peut être lu ou modifié à souhait. Nous parlerons ici des processeurs Intel x86 à adressage à 32 bits (tout sera similaire mais doublé en 64 bits ou en 2*32 bits). Utiliser un adressage à 32 bits signifie que les adresses sont composées de 32 chiffres (soit 4 bytes car 1 byte est constitué de 8 bits et 8*4 = 32), il y a donc 2³² possibilités d’adresses, soit 4 294 967 296 adresses différentes. Les variables d’un programme ne sont donc rien de plus que certains endroits de la mémoire qui sont utilisés pour garder l’information.

Les pointeurs sont un type spécial de variables qui ne prennent que 4 bytes en mémoire et contiennent une autre adresse mémoire. Ce type de variable peut paraître superficiel mais ne l’est pas du tout ; en effet, la mémoire ne peut pas être déplacée. Par conséquent, pour la réutiliser il est nécessaire de la recopier, ce qui peut demander à la fois beaucoup de ressources, voire de temps quand une action est répétée beaucoup de fois, et aussi bien évidemment d’espace mémoire. Ainsi, on comprend l’intérêt de n’avoir à passer qu’une petite variable de 4 bytes qui permet d’indiquer à de nouvelles fonctions l’emplacement du bloc de données dans la mémoire.

Le processeur lui-même a aussi sa propre mémoire, relativement réduite. Elle contient des données essentielles au bon fonctionnement de vos ordinateurs : les registres, qui permettent de garder des traces de ce qui se passe pendant l’éxécution de programmes. Le plus remarquable sûrement est l’EIP (extended instruction pointer). L’EIP est un pointeur qui garde l’adresse de l’instruction qui est en cours d’éxécution. D’autres registres connus et importants sont ESP (extended stack pointer) et EBP (extended base pointer). Ces trois registres sont primordiaux pendant l’éxécution d’un programme, ce que nous aurons l’occasion d’expliquer dans la section "segmentation de la mémoire d’un programme". Mais avant, nous allons rapidement expliquer l’allocation de la mémoire et le placement des variables en mémoire en utilisant le formidable outil qu’est le langage C.

Documentations publiées dans cette rubrique