Comprendre l'utilisation de la pile et du tas en c
Gérer efficacement la mémoire est cruciale dans la programmation C. Lors de la détermination de l'endroit où stocker les variables, il faut décider entre la pile et le tas.
pile vs tas: une question de durée de vie
Contrairement à la croyance populaire, les performances ne sont pas le principal facteur de sélection entre la pile et le tas. La différence clé réside dans la durée de vie des variables.
heap: stocke des objets, des variables rarement utilisées, et de grandes structures de données qui ont besoin de surmonter leur fonction de déclaration. Extrait de code suivant:
classe Class Thingy; Thingy * foo () { int a; // entier alloué par la pile Chose b; // Objet de chose alloué à pile Thingy * pointertob = & b; // pointeur vers l'objet alloué à pile Thingy * pointertoc = new Thingy (); // Objet de chose alloué à tas // SAFE: Thing-Allocated Things sucentlives foo () return pointertoc; // dangereux: un truc alloué par la pile sera détruit lors du retour foo () return pointertob; } Dans cet exemple:
pointertob pointers vers un objet alloué par la pile. foo ().
class Thingy; Thingy* foo( ) { int a; // Stack-allocated integer Thingy B; // Stack-allocated Thingy object Thingy *pointerToB = &B; // Pointer to stack-allocated object Thingy *pointerToC = new Thingy(); // Heap-allocated Thingy object // Safe: Heap-allocated Thingy outlives foo() return pointerToC; // Unsafe: Stack-allocated Thingy will be destroyed upon foo() return return pointerToB; }
tenter de retourner le pointertob peut conduire à un crash, car l'objet alloué à l'empilement qu'il pointe sera clarté. machine sous-jacente. "Heap" et "Stack" sont des inventions du compilateur, et la mémoire de l'ordinateur est simplement un tableau d'adresses. En examinant des concepts tels que la pile d'appels et la convention d'appel, on peut comprendre comment la machine exécute les fonctions et gère la mémoire.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3