Mémoire Pile vs Tas
Fait partie de la section Logic & Flow du Journey C de Coddy — leçon 31 sur 63.
Lorsque votre programme C s'exécute, il utilise deux régions distinctes de la mémoire : la pile (stack) et le tas (heap). Comprendre la différence entre ces zones de mémoire est crucial pour une programmation en C efficace, particulièrement lors de l'utilisation de pointeurs et de l'allocation dynamique de mémoire.
La pile est utilisée pour l'allocation de mémoire statique. C'est là que sont stockées vos variables locales, vos paramètres de fonction et les informations d'appel de fonction. La pile est gérée automatiquement par le système - lorsque vous déclarez une variable locale, de la mémoire est allouée sur la pile, et lorsque la variable sort de sa portée, cette mémoire est automatiquement libérée.
void function() {
int x = 10; // Alloué sur la pile
char arr[100]; // Également alloué sur la pile
// La mémoire est automatiquement libérée à la fin de la fonction
}Le tas (heap) est utilisé pour l'allocation dynamique de mémoire. Il s'agit d'un pool de mémoire plus important que vous pouvez demander pendant l'exécution du programme.
Contrairement à la pile, le tas nécessite une gestion manuelle - vous devez explicitement demander de la mémoire et la libérer plus tard lorsque vous avez terminé. Cela vous donne plus de contrôle mais aussi plus de responsabilité.
La différence clé réside dans la gestion : la mémoire de pile (stack) est automatique et de taille limitée, tandis que la mémoire de tas (heap) est manuelle et beaucoup plus vaste. Dans les prochaines leçons, vous apprendrez à travailler avec la mémoire de tas en utilisant des fonctions comme malloc() et free().
Aide-mémoire
Les programmes C utilisent deux régions de mémoire distinctes :
Pile (Stack) : Utilisée pour l'allocation de mémoire statique. Stocke les variables locales, les paramètres de fonction et les informations d'appel de fonction. La mémoire est gérée automatiquement - allouée lorsque les variables sont déclarées et libérée lorsqu'elles sortent de leur portée.
void function() {
int x = 10; // Alloué sur la pile
char arr[100]; // Également alloué sur la pile
// La mémoire est automatiquement libérée à la fin de la fonction
}Tas (Heap) : Utilisé pour l'allocation de mémoire dynamique. Un pool de mémoire plus important qui nécessite une gestion manuelle - vous devez explicitement demander et libérer de la mémoire en utilisant des fonctions comme malloc() et free().
Différence clé : La mémoire de la pile est automatique et de taille limitée, tandis que la mémoire du tas est manuelle et beaucoup plus grande.
Essayez vous-même
Cette leçon ne comprend pas de défi de code.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Les bases des pointeurs
Qu'est-ce qu'un pointeur ?Déclaration de pointeursL'opérateur d'adresse (&)L'opérateur de déréférencement (*)Pointeurs NULLRécapitulatif : Les bases des pointeurs4Projet : Utilitaire de texte simple
Présentation du projetCompter les caractères2Pointeurs et Tableaux
Noms de tableaux comme pointeursÉléments de tableau - PointeursArithmétique des pointeursComparaison de pointeursRécapitulatif : Parcours de tableau par pointeur5Pointeurs et fonctions
Passage par valeurPassage de pointeurs aux fonctionsModifier des variables via des pointeursUn exemple classique : SwapPassage de tableaux aux fonctionsRécapitulatif : Pointeurs comme arguments de fonction3Tableaux de caractères et chaînes
Les chaînes comme tableaux de charLe terminateur nulSaisie de chaînes avec scanfUtilisation de strlen()Utilisation de strcpy()Utilisation de strcat()Utilisation de strcmp()Récapitulatif : Fonctions de base sur les chaînes