Académique Documents
Professionnel Documents
Culture Documents
Cours 2
Code binaire, mémoire, pointeurs
Bus adresses
Unité de Pile
commande
Registres
Tas
Données
Unité
arithmétique Programme
et logique
Unité de controle Unité mémoire
Bus données
≈ micro processeur
La mémoire
valeur booléenne (vrai ou faux)
Deux interprétations :
valeur numérique (0 ou 1 (ou 6= 0))
8 9 10 11 12 13 14 15
IOOO IOOI IOIO IOII IIOO IIOI IIIO IIII
Information binaire
Tableau comprenant la représentation de plusieurs nombres selon le
type unsigned char (sur un octet).
Crédits : https:
//zestedesavoir.com/tutoriels/755/le-langage-c-1/
notions-avancees/la-representation-des-types/
Calcul binaire
Organisation de la mémoire
I octet : paquets de 8 bits
OOIOIOIO
I mot mémoire : paquets de 4 ou 8 1 octets
OOIOIOIO OOIOIOIO OOIOIOIO OOIOIOIO
I séquence de mots mémoire
OOOOOOOO OOOOOOOO OOOOOOOO OOIOIOIO
OOIIOIOO OOIIOOIO OOOOOOOO OOOOOOOO
OOIOIOIO OOIOIOIO OOIOIOIO OOIOIOIO
OOIOIOIO OOIOIOIO OOIOIOIO OOOOOOOO
...
ou www.wooclap.com/CMSGFX
Types et données en mémoire
Crédits : https://zestedesavoir.com/tutoriels/755/le-langage-c-1/
notions-avancees/la-representation-des-types/
Types et données en mémoire
Et les float ?
Interprétation en 3 parties : signe, mantisse, exposant.
Crédits : https://zestedesavoir.com/tutoriels/755/le-langage-c-1/
notions-avancees/la-representation-des-types/
Types et données en mémoire
" Attention
Les octets OOOOOOOO OOOOOOOO OOOOOOOO OOIOIOIO n’ont pas le
même sens suivant qu’ils sont de type int ou float .
Et les programmes
Chaque octet a une adresse
0x7ffee345b300 11110011010100011101100101010101
0x7ffee345b304 11010001010100011100110101011101
0x7ffee345b308 11010001010100011101100101010101
0x7ffee345b30c 11010001010100011101100111010101
0x7ffee345b310 10010001010100011101100101010001
0x7ffee345b314 11010001010100011101101101010111
Organisation de la mémoire
Les programmes et les données
Paramètres,
Pile Variable locales
sp
Stack pointer
Localisations :
I globales : dans la zone données
I locales et paramètres : dans la pile
www.wooclap.com/CMSGFX ou
Dynamique de la pile
PILE
main x 0 0x7ffee345b300
4 octets
1
Dynamique de la pile
PILE
5
main x 40
2
Dynamique de la pile
PILE
x 41
5
main x 40
3
Dynamique de la pile
PILE
x 41
5
main x 40
4
Dynamique de la pile
PILE
5
main x 442
5
Dynamique de la pile
PILE
5
Terminal
main x 442
X:~/ $ gcc –Wall prog.c
X:~/ $ ./a.out
42
6
Dynamique de la pile
PILE
5
Terminal
main x 442
X:~/ $ gcc –Wall prog.c
X:~/ $ ./a.out
42
7
Dynamique de la pile
PILE
5
Terminal
4
X:~/ $ gcc –Wall prog.c
X:~/ $ ./a.out
42
X:~/
8
La pile : variable, portée
Variables déclarées dans un bloc ne sont valables que dans ce
bloc.
Elles sont :
1. empilées à l’entrée du bloc
2. dépilées en sortie de bloc
Exemple : que ce passe-t-il avec ce code (Ex bloc2.c) ?
1 #i n c l u d e < s t d i o . h>
2 #i n c l u d e < s t d l i b . h>
3
4 int f ( int x) {
5 i f ( x == 0 ) { www.wooclap.com/CMSGFX
6 int y = 0;
7 } else {
8 y = 1;
9 }
10 return y ;
11 }
12 i n t main ( ) {
13 i n t a=f ( 4 ) ;
14 p r i n t f ( ”%d\n” , a ) ;
15 return 0;
16 }
La pile : variable, portée
main x 0 0x7ffee345b300
Variable et adresse en C
PILE
p 0x300 0x304
main x 0 0x300
9
Variable : adresse et valeur (bis)
Affectation : x = x+1
I le x à gauche désigne l’adresse
I le x à droite désigne la valeur à cette adresse
Affectation avec un pointeur : *p = *p+1
I le *p à gauche désigne l’adresse contenue dans a (ici, adresse
de a)
I le *p à droite désigne l’entier contenu à l’adresse contenue
dans p (ici, la valeur de x)
⇒ effet de bord :après *p = *p + 1, x vaut 1
Pointeurs dans les paramètres de fonction
Fonction d’échange
1 v o i d swap ( i n t x , i n t y ) {
2 int t ;
3 t = x;
4 x = y;
5 y = t;
6 }
8 i n t main ( ) {
9 i n t a =2, b =3;
10 p r i n t f ( ” a : %d b : %d\n” , a , b ) ;
11 swap(&a , &b ) ;
12 p r i n t f ( ” a : %d b : %d\n” , a , b ) ;
13 return 0;
14 }