Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
pile_et_tas [2015/05/07 21:45] davidbrcz [Organisation de la mémoire] |
pile_et_tas [2015/08/03 11:03] (Version actuelle) gbdivers ancienne révision restaurée |
||
---|---|---|---|
Ligne 18: | Ligne 18: | ||
===== Durée de vie et portée ===== | ===== Durée de vie et portée ===== | ||
Au moment de la création d'une variable, le compilateur va automatiquement réserver de la mémoire dans la pile | Au moment de la création d'une variable, le compilateur va automatiquement réserver de la mémoire dans la pile | ||
- | pour cette dernière. La pile n'ayant pas une taille infinie, il est important qu'il puisse libérer cette mémoire le plus tôt possible. Il peut le faire à partir du moment où le flux d’exécution sort du bloc où la variable a été déclarée. La destruction des variables allouées sur la pile se fera dans l'ordre inverse de leur déclaration. | + | pour cette dernière. La pile n'ayant pas une taille infinie, il est important qu'il puisse libérer cette mémoire le plus tôt possible. Il peut le faire à partir du moment où le flux d’exécution sort du bloc où la variable a été déclarée et c'est ce qui a été choisi. Cette propriété est à la base de la gestion automatique de la mémoire du tas via le RAII. |
+ | |||
+ | A noter que la destruction des variables allouées sur la pile se fera dans l'ordre inverse de leur déclaration. | ||
Dans l'exemple ci dessous, le flux d'exécution commence à //main//. La première accolade ouvrante déclare un nouveau bloc qui se termine à l'accolade fermante correspondante 5 lignes plus bas. La première instruction de ce bloc est la création d'une variable //a//. Le flux d'exécution rentre alors dans un nouveau bloc, qui se termine 3 lignes plus bas. Dans ce bloc, on va créer les variables //b// et //c// avant d'en sortir. Au moment de la sortie du bloc, //c// puis //b//. Le flux rencontre ensuite la fin du premier bloc, où il va procéder alors à la destruction de //a//. | Dans l'exemple ci dessous, le flux d'exécution commence à //main//. La première accolade ouvrante déclare un nouveau bloc qui se termine à l'accolade fermante correspondante 5 lignes plus bas. La première instruction de ce bloc est la création d'une variable //a//. Le flux d'exécution rentre alors dans un nouveau bloc, qui se termine 3 lignes plus bas. Dans ce bloc, on va créer les variables //b// et //c// avant d'en sortir. Au moment de la sortie du bloc, //c// puis //b//. Le flux rencontre ensuite la fin du premier bloc, où il va procéder alors à la destruction de //a//. |