Aller au contenu principal

Gestion mémoire & pointeurs

Progression

#Gestion de la mémoire et pointeurs

Cette étape du module installe une discipline de gestion mémoire. Nous démarrons avec les primitives d’allocation (malloc, calloc, realloc, free) et illustrons, à l’aide d’un tampon dynamique, pourquoi la convention « celui qui alloue libère » doit être documentée par du code (structures, fonctions d’initialisation et de destruction). À travers le suivi d’un bug concret, nous visualisons ce qui se passe quand un tampon est réaloué puis partagé sans précautions.

Les pointeurs sont ensuite abordés dans des situations variées. Nous manipulons des pointeurs de fonction pour écrire un qsort personnalisé, décortiquons l’utilisation de void * dans les API génériques et expliquons les pointeurs de pointeurs (char **argv) via la construction d’un mini interpréteur de commandes. Les étudiants apprennent à lire et à écrire ces signatures intimidantes en les reliant à des cas concrets.

Dernier bloc : l’outillage. Nous montrons comment activer les sanitizers (-fsanitize=address,undefined) pour détecter les erreurs de mémoire au plus tôt, puis comment compléter l’analyse avec Valgrind (memcheck) afin de valider qu’un projet plus conséquent reste sans fuite. Les ateliers demandent d’écrire un allocateur de pool et un vector générique, l’objectif étant de manipuler ces outils dès l’implémentation.

#Atelier

  • Implémentez un allocateur de pool (arena) avec malloc initial + bum allocator.
  • Écrivez un vector générique avec void * et macros.