Comprendre ce que signifie vraiment "x bits", comment le CPU localise la RAM, et pourquoi l'alignement mémoire existe.
01 — Concept de base
Qu'est-ce qu'un processeur "N bits" ?
Quand on dit qu'un processeur est 32 bits ou 64 bits, on parle avant tout de la largeur de ses registres internes. Un registre est une case mémoire ultra-rapide à l'intérieur même du CPU. C'est là que vivent les données en cours de traitement.
Registre 32 bits — exemple : adresse 0x00000004
Valeur décimale : 4 | Hexadécimal : 0x00000004
Adresse ≠ Donnée. L'adresse est un numéro de case — elle sert à localiser un endroit en RAM. La donnée est ce qui est stocké dans cette case (et éventuellement les suivantes). Ces deux concepts sont totalement séparés.
Espace mémoire adressable
Puisque les adresses sont des entiers codés sur n bits, le nombre total de cases accessibles est 2ⁿ. Chaque case correspond à 1 octet en RAM — peu importe la taille du CPU.
Architecture
Adresses possibles
Espace max
Capacité
8 bits
2⁸ = 256
256 octets
16 bits
2¹⁶ = 65 536
64 Ko
32 bits
2³² ≈ 4,3 milliards
4 Go
64 bits
2⁶⁴ ≈ 1,8 × 10¹⁹
18 exaoctets
Important : "Adresser" ne veut pas dire "lire d'un coup". 2ⁿ est le nombre total de cases numérotables. Le CPU va chercher une case à la fois, il ne lit pas tout en même temps — comme un numéro de rue ne vous donne pas accès à toutes les maisons simultanément.
02 — Lire & Écrire en mémoire
Deux bus, deux rôles distincts
Pour accéder à la RAM, le CPU utilise deux canaux séparés. L'un transporte où aller, l'autre transporte quoi lire ou écrire.
① Bus d'adresse
0x00000004"je veux lire ici"
→RAM
② Bus de données
0x12 0x34 0x56 0x78"la donnée lue"
←RAM
Pour une écriture, les deux flèches s'inversent : le CPU envoie l'adresse ET la donnée vers la RAM.
Exemple concret : stocker 0x12345678
Cet entier fait 4 octets. Le CPU envoie l'adresse de départ 0x0004. La donnée s'étale ensuite sur 4 cases consécutives.
Adresse
Contenu
Description
0x0000
…
autre donnée
0x0001
…
0x0002
…
0x0003
…
0x0004
0x12
← adresse envoyée par le CPU (point de départ)
0x0005
0x34
la donnée s'étale…
0x0006
0x56
0x0007
0x78
fin de la donnée (4 octets)
0x0008
…
autre donnée
À retenir : Le CPU envoie uniquement l'adresse de départ. La donnée occupe autant de cases consécutives que sa taille (ici 4 octets = 4 cases). La taille d'une donnée est indépendante du nombre de bits du CPU.
Et pour stocker ?
La même logique s'inverse. Le CPU envoie simultanément l'adresse de destination sur le bus d'adresse, et les données à écrire sur le bus de données. La RAM reçoit les deux et place chaque octet à sa case.
W1Le CPU calcule l'adresse de destination — où stocker
W2Il envoie cette adresse sur le bus d'adresse (n bits, fixe)
W3Il envoie la donnée sur le bus de données (taille variable : 1, 2, 4 ou 8 octets)
W4La RAM écrit chaque octet dans la case correspondante
03 — Alignement mémoire
Pourquoi le CPU lit par blocs
La RAM n'est pas lue octet par octet à chaque accès — ce serait trop lent. Le CPU lit la RAM par blocs de 4 ou 8 octets en une seule opération. Si ta donnée "tombe pile" dans un bloc → 1 accès. Si elle chevauche deux blocs → 2 accès + recoller les morceaux.
Cas 1 — Aligné
Entier de 4 octets démarrant à 0x0004 (multiple de 4)
+0
+1
+2
+3
+4
+5
+6
+7
0x0000
—
—
—
—
12
34
56
78
Bloc 1 [0x0000–0x0003]
Bloc 2 [0x0004–0x0007] → 1 seul accès ✓
La donnée entière tient dans un seul bloc → le CPU la lit en 1 accès mémoire.
Cas 2 — Non aligné
Entier de 4 octets démarrant à 0x0003 (pas un multiple de 4)
+0
+1
+2
+3
+4
+5
+6
+7
0x0000
—
—
—
12
34
56
78
—
Bloc 1 → accès 1
Bloc 2 → accès 2
1er octet dans bloc 1
Octets restants dans bloc 2
Le CPU doit lire 2 blocs séparément puis recoller les morceaux. Pénalité de performance. Sur certains CPU anciens (MIPS, ARM v6), cela causait carrément une erreur.
La règle d'alignement
Une donnée de k octets est dite alignée si son adresse de départ est un multiple de k.
Type
Taille
Aligné si adresse multiple de
Exemple OK
Exemple KO
char
1 octet
1 (toujours aligné)
0x0003
—
short
2 octets
2
0x0004
0x0003
int
4 octets
4
0x0008
0x0006
long
8 octets
8
0x0010
0x000C
04 — Démo interactive
Visualiser un registre en binaire
Modifie la valeur pour voir comment elle s'encode sur 32 bits. Chaque carré représente un bit.
Choisis une adresse de départ et la taille de ta donnée. L'outil indique si l'accès sera aligné ou non.
Simulateur d'alignement
0x0004
Aligné ✓
0x0004 est un multiple de 4 → 1 accès mémoire
05 — Résumé
Les points essentiels
Définition CPU n bits
Registres = n bits
La largeur des registres généraux est la définition canonique. C'est elle qui détermine la taille des adresses.
Espace adressable
2ⁿ cases
Chaque case = 1 octet. Le CPU peut numériser jusqu'à 2ⁿ cases distinctes. 32 bits → 4 Go max.
Taille d'une adresse
n bits (fixe)
Une adresse est un entier qui tient dans un registre. Sa taille est fixée par le CPU — toujours n bits.
Taille d'une donnée
Variable
8, 16, 32, 64 bits… totalement indépendant du CPU. La donnée s'étale sur autant de cases consécutives que nécessaire.
Séquence complète : lire 4 octets en RAM
01Le CPU calcule l'adresse de départ et la place dans un registre (n bits)
02Il envoie cette adresse sur le bus d'adresse → direction RAM
03La RAM lit les 4 octets consécutifs à partir de cette adresse
04Elle renvoie ces octets sur le bus de données → direction CPU
05Le CPU stocke la donnée dans un registre destination
✓Si l'adresse est un multiple de 4 → alignée → 1 seul accès mémoire. Sinon → 2 accès + recoller.
La confusion fréquente : "N bits" est souvent utilisé comme raccourci marketing pour "génération" ou "puissance". En réalité c'est la largeur des registres qui compte, parce qu'elle conditionne la taille des adresses (et donc l'espace mémoire), la taille des entiers natifs, et la compatibilité binaire (ABI 32 vs 64 bits).