CodeGym /Cours /Python SELF FR /Mémoire vive et représentation des données

Mémoire vive et représentation des données

Python SELF FR
Niveau 52 , Leçon 1
Disponible

8.1 Mémoire vive

La mémoire vive (RAM, ОЗУ) de l'ordinateur est un tableau de cellules mémoire, chacune ayant une adresse unique. Ces cellules peuvent stocker des données de types différents, comme des nombres, des caractères et des pointeurs. Lorsqu'un programme s'exécute, il place ses données et instructions dans cette mémoire pour un accès rapide.

Exemple de cellules mémoire :

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79

Chaque cellule a son numéro d'ordre, également appelé adresse de la cellule en mémoire ou simplement adresse. Si votre ordinateur dispose de 8 Go de mémoire, il possède 8 milliards de ces cellules où l'on peut stocker quelque chose d'utile.

Bits et octets

Chaque cellule peut stocker un octet d'information. Chaque octet est composé de 8 bits, et chaque bit peut contenir seulement 0 ou 1. Exemple (pour les entiers positifs) :

Nombre Représentation binaire Arrondi à l'octet
0 0 00000000
1 1 00000001
100 1100100 01100100
1000 1111101000 00000011-11101000
1000 000 000 111011100110101100101000000000 00111011-10011010-11001010-00000000

Plus une variable occupe d'octets, plus elle peut stocker de valeurs. Exemple :

  • 1 octet — 256 valeurs uniques
  • 2 octets — 65 mille valeurs uniques
  • 3 octets — 16 millions
  • 4 octets — 4 milliards

8.2 Comment les données sont représentées en mémoire

Types de données et leur représentation

Données numériques à l'intérieur du processeur et en mémoire

  • Nombres entiers : stockés sous forme binaire. La taille peut varier (1 octet, 2 octets, 4 octets).
  • Nombres réels : stockés au format à virgule flottante (par exemple, format IEEE 754 pour les nombres de 4 octets et 8 octets).

x = 42  # Nombre entier
y = 3.14  # Nombre réel

Important ! En Python, les types intégrés int et float sont des classes complètes capables d'effectuer des calculs complexes avec des nombres de longueur infinie. Cependant, si vous utilisez des bibliothèques pour le calcul scientifique ou l'IA, vous rencontrerez le format de données dont j'ai parlé ci-dessus.

Données de caractères en mémoire de l'ordinateur

Les symboles et les chaînes sont stockés en mémoire sous forme de séquences d'octets. Par exemple, dans l'encodage ASCII, chaque symbole occupe 1 octet, dans l'encodage UTF-8 peut occuper de 1 à 4 octets.

En Python 3.x, par défaut, l'encodage UTF-8 est utilisé pour les chaînes, mais vous pouvez lire des fichiers où le texte est stocké dans d'autres formats, ou transmettre des données sur le réseau dans un encodage autre que UTF-8.

Exemple :


char = 'A'  # Symbole
string = "Hello, world!"  # Chaîne

Les symboles individuels en Python n'ont pas de type propre - le type str est également utilisé pour eux. Cependant, en mémoire, ces chaînes sont stockées par caractères. Un symbole occupe généralement 1—4 octets.

Pointeurs

Les pointeurs stockent les adresses d'autres cellules mémoire. Ils permettent aux programmes de travailler avec des structures de données dynamiques et de gérer la mémoire plus efficacement.

Exemple :


list = [1, 2, 3, 4]  # Liste
list_pointer = id(list)  # Pointeur vers le début de la liste

8.3 Exemples de représentation des données en mémoire vive

1. Représentation des nombres entiers

Les nombres entiers sont stockés en mémoire sous forme de nombres binaires (bits). Selon le type de données, ils peuvent occuper différentes quantités d'octets. Par exemple, int occupe généralement 4 octets (32 bits).

Voici comment le nombre 42 sera représenté en mémoire :

00000000 00000000 00000000 00101010

2. Représentation des nombres réels (à virgule flottante)

Les nombres réels (par exemple, le type float) sont stockés en mémoire au format à virgule flottante, généralement selon la norme IEEE 754. float occupe généralement 4 octets (32 bits), et double — 8 octets (64 bits).

Important ! Ce sont des types de données standard, liés à la mémoire et au processeur. Le type float en Python correspond au type double couramment utilisé et occupe 8 octets.

Voici comment le nombre 3.14 sera représenté en mémoire :

01000000 01001000 11110110 01100110

3. Représentation des symboles et des chaînes

Les symboles (par exemple, le type char) sont stockés en mémoire sous forme de séquence d'octets. Les chaînes sont des tableaux de symboles. Dans les langages C/C++, les chaînes se terminent par un nul byte (\0), mais en Python ce n'est pas le cas.

Voici comment la chaîne Hello sera représentée en mémoire :

'H' 'e' 'l' 'l' 'o'

Ce qui, à son tour, sera représenté en tant que 0 et 1 :

01001000 01100101 01101100 01101100 01101111

8.4 Adressage de la mémoire dynamique

La mémoire dynamique est allouée et libérée pendant l'exécution du programme, selon les besoins. Tous les objets que vous créez en Python sont créés dans cette mémoire.

Elle se divise en 2 types :

Heap : Zone de mémoire à partir de laquelle sont alloués les objets dynamiques. La gestion de cette mémoire est effectuée par des fonctions d'allocation (par exemple, malloc en C) et de libération (par exemple, free en C).

Stack : Zone de mémoire utilisée pour stocker les variables locales et les données d'appel de fonctions. La mémoire est automatiquement allouée et libérée lors de l'entrée et de la sortie d'une fonction.

Encore une fois, je ne peux pas donner un exemple en Python, car il est trop haut niveau pour de telles opérations. Je peux donner un exemple en langage C :


// Allocation dynamique de mémoire pour un tableau de 10 entiers
int *dynamic_var = (int *)malloc(sizeof(int) * 10); 

// Libération de la mémoire
free(dynamic_var);  

L'adressage de la mémoire est le processus de détermination d'une adresse unique pour chaque cellule mémoire. Chaque adresse indique un emplacement spécifique en mémoire qui peut contenir des données ou des instructions.

Types d'adressage

Adressage physique : accès direct aux adresses physiques des cellules mémoire. Géré par le matériel (par exemple, le contrôleur mémoire).

Adressage virtuel : utilise un mécanisme de gestion de la mémoire, tel que la mémoire paginée ou la mémoire segmentée, pour fournir aux processus un espace d'adresses isolé et protégé.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION