Programmation • IoT

Chap 1 – Les variables et la mémoire

Document réservé

Vous consultez actuellement la présentation publique de ce chapitre.

Les documents PDF complets, comprenant les développements théoriques, les exemples détaillés et les exercices, sont disponibles sur demande.

Pour obtenir un accès, contactez-moi via la page Contact en indiquant les domaines qui vous intéressent (C++, ESP-IDF, électronique, etc.).

Chapitre 1 – Les variables et la mémoire 1 Chapitre 1 – Les variables et la mémoire 1.1 Prérequis, nouvelles notions et objectifs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Programme 1 — Variables et mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Réponses aux questions de réflexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Accueil
Chapitre 1 – Les variables et la mémoire Chapitre 1 – Les variables et la mémoire Prérequis, nouvelles notions et objectifs 2. Types fondamentaux. 1. Adresse mémoire. 3. Le mot clé sizeof. • Qu’est-ce qu’une variable ? • Où est-elle stockée ? • Qu’est-ce qu’une adresse ? • Que signifie &a ? • Combien d’octets occupe un int ? • Les variables sont-elles côte à côte ? • Pourquoi une adresse est-elle écrite en hexadécimal ? • Une adresse est-elle une valeur ? Programme 1 — Variables et mémoire Programme 1 – Programme C++ vraiment minimal std::cout << « sizeof(a)=  » << sizeof(a) << ’\n’; Commençons par étudier la première ligne. Lorsque le compilateur voit le code
Accueil
Chapitre 1 – Les variables et la mémoire il reconnait un objet de type 1 int, l’identificateur a, l’opérateur d’initialisation = et le littéral entier 10. La sémantique de cette instruction est : Créer un objet nommé a, de type int, puis l’initialiser avec la valeur entière 10. Pour faciliter la compréhension, nous représenterons la mémoire de la manière suivante : La Figure 1 est volontairement très simplifiée. Elle ne représente pas la mémoire réelle de l’ordinateur, mais un modèle qui nous permettra de comprendre progressivement le fonctionnement du langage C++. Une première remarque importante s’impose. Le nom a n’est pas stocké dans la mémoire de l’ordinateur. Ce nom est uniquement connu du compilateur (et éventuellement du débogueur). En mémoire, il n’existe que des suites de bits représentant les différentes valeurs manipulées par le programme. a donc pour effet de réserver une zone mémoire suffisamment grande pour contenir un objet de type int, puis d’y placer la représentation binaire de la valeur entière 10. Le programme affiche ensuite trois informations : — la valeur de l’objet a, — son adresse mémoire à l’aide de l’opérateur \&, — la taille mémoire occupée par cet objet grâce à l’opérateur sizeof. Une exécution typique peut produire un résultat semblable au suivant : Programme 2 – Exemple d’exécution Il est important de comprendre que l’adresse affichée dépend de nombreux facteurs (système d’exploitation, compilateur, options de compilation, etc.). Elle sera donc pratiquement toujours différente d’un ordinateur à l’autre et même d’une exécution à l’autre. Ce qui nous intéresse n’est donc pas la valeur numérique de cette adresse, mais sa L’opérateur \& signifie « donner l’adresse mémoire de l’objet ». Dans notre exemple, l’expression se lit donc simplement : « Adresse mémoire de l’objet a. » 1. Le terme objet prendra son sens plus tard.
Accueil
Chapitre 1 – Les variables et la mémoire Cette notion d’adresse est fondamentale. Toute l’étude des pointeurs reposera sur ce concept. Avant de manipuler des pointeurs, il est donc indispensable de bien comprendre ce que représente réellement une adresse mémoire. ✓ Une variable est un objet possédant un type, une valeur et une adresse mémoire. ✓ Le nom d’une variable n’est pas stocké dans la mémoire ; il est utilisé par le compilateur. ✓ L’opérateur \& permet d’obtenir l’adresse d’un objet. ✓ L’opérateur sizeof indique le nombre d’octets occupés par un objet. ✓ Les adresses affichées lors de l’exécution peuvent varier d’un ordinateur à l’autre. Questions de réflexion 1. Pourquoi une adresse mémoire est-elle généralement affichée en hexadécimal ? 2. Deux variables déclarées successivement sont-elles toujours voisines en mémoire ? 3. La taille d’un int est-elle toujours de quatre octets ? 4. Pourquoi le nom d’une variable n’a-t-il pas besoin d’être conservé en mémoire pendant l’exécution du programme ? Réponses aux questions de réflexion 1. Pourquoi une adresse mémoire est-elle généralement affichée en hexadécimal ? Une adresse mémoire est un nombre entier. Elle pourrait être affichée en décimal, en binaire ou dans toute autre base. La notation hexadécimale est cependant beaucoup plus compacte que l’écriture binaire tout en conservant une correspondance directe avec celle-ci : un chiffre hexadécimal représente exactement quatre bits. Cette représentation est devenue un standard dans la plupart des outils de développement. 2. Deux variables déclarées successivement sont-elles toujours voisines en mémoire ? Non. Sur de nombreux compilateurs, deux variables locales déclarées successivement sont effectivement placées à des adresses proches. Cependant, le standard C++ ne garantit absolument pas cet ordre. Le compilateur est libre d’organiser la mémoire comme il le souhaite afin d’optimiser le programme. Il ne faut donc jamais écrire un programme en supposant que deux variables seront toujours contiguës en mémoire. 3. La taille d’un int est-elle toujours de quatre octets ? Non. Le standard C++ n’impose pas une taille fixe pour le type int. Il impose uniquement une taille minimale ainsi que des relations entre les différents types entiers. Aujourd’hui, sur les ordinateurs personnels (Windows, Linux, macOS) ainsi que sur les microcontrôleurs ESP32, un int occupe généralement quatre octets. Il ne faut toutefois pas considérer cette valeur comme une propriété du Lorsque la taille doit être parfaitement connue, on utilise plutôt les types à taille fixe comme int32_t ou uint32_t, qui seront étudiés dans l’annexe A. 4. Pourquoi le nom d’une variable n’a-t-il pas besoin d’être conservé en mémoire pendant l’exécution du programme ? Le nom d’une variable est destiné au programmeur et au compilateur. Pendant la compilation, le compilateur remplace les noms symboliques par des adresses mémoire et d’autres informations internes. Une fois le programme compilé, le processeur ne manipule plus des noms tels que a ou compteur. Il travaille uniquement avec des adresses mémoire et des données binaires. Les noms des variables ne sont conservés que si le programme est compilé avec des informations de débogage. Elles permettent alors au débogueur d’afficher les variables avec leur nom d’origine.
Accueil
Chapitre 1 – Les variables et la mémoire
Accueil
cpp-Chap1- Chapitre 1 – Les variables et la mémoire
Accueil

Contenu

Inscription

×
Cancel