Adloun

Où vit chaque variable

Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 8 — Mémoire, fichiers et entrées-sorties

Énoncé

Pour chacune des six entités de ce programme, dire dans quelle zone elle réside et quelle est sa durée de vie.


int globale = 1;

void ou_suis_je(int parametre) {
    int locale = 3;
    int* du_tas = malloc(sizeof(int));
    /* ... */
    free(du_tas);
}

Corrigé

EntitéZoneDurée de vieAdresse mesurée
`ou_suis_je`codetout le programme`0x102f53dd4`
`globale`globalestout le programme`0x102f58000`
`du_tas` (le bloc pointé)tasdu `malloc` au `free``0x10365dbd0`
`parametre`pilel'appel`0x16ceae5fc`
`locale`pilel'appel`0x16ceae5f8`
`du_tas` (la variable)pilel'appel---

Les adresses de la dernière colonne ont été mesurées par un printf("%p", ...) sur chacune. Trois choses s'y lisent, et aucune n'est un détail :

Ces adresses changent à chaque exécution : le système décale les zones au hasard (ASLR) pour compliquer les attaques. Ce qui ne change pas, ce sont les écarts relatifs et l'appartenance aux zones.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.