Architecture — Cours

Processeur N bits
Adressage & Alignement

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
0x0000autre donnée
0x0001
0x0002
0x0003
0x0004 0x12 ← adresse envoyée par le CPU (point de départ)
0x00050x34la donnée s'étale…
0x00060x56
0x00070x78fin de la donnée (4 octets)
0x0008autre 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.

W1 Le CPU calcule l'adresse de destination — où stocker
W2 Il envoie cette adresse sur le bus d'adresse (n bits, fixe)
W3 Il envoie la donnée sur le bus de données (taille variable : 1, 2, 4 ou 8 octets)
W4 La 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.

TypeTailleAligné si adresse multiple deExemple OKExemple 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.

Registre 32 bits
4
Décimal : 4  |  Hex : 0x00000004  |  Binaire : 00000000 00000000 00000000 00000100

Vérifier l'alignement d'une adresse

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

01 Le CPU calcule l'adresse de départ et la place dans un registre (n bits)
02 Il envoie cette adresse sur le bus d'adresse → direction RAM
03 La RAM lit les 4 octets consécutifs à partir de cette adresse
04 Elle renvoie ces octets sur le bus de données → direction CPU
05 Le 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).