Outils d'utilisateurs

Outils du Site


pile_et_tas

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

pile_et_tas [2015/05/07 21:42]
davidbrcz [Durée de vie et portée]
pile_et_tas [2015/08/03 11:03] (Version actuelle)
gbdivers ancienne révision restaurée
Ligne 15: Ligne 15:
 A l'inverse, l'utilisation du tas doit être faite explicitement par le programmeur par l'utilisation de l'allocation dynamique. Cela peut être fait manuellement avec des pointeurs nus ou par des objets qui le feront pour nous. Cette zone est virtuellement illimitée : tant qu'il y a de la mémoire de libre, on peut créer des objets dedans. A l'inverse, l'utilisation du tas doit être faite explicitement par le programmeur par l'utilisation de l'allocation dynamique. Cela peut être fait manuellement avec des pointeurs nus ou par des objets qui le feront pour nous. Cette zone est virtuellement illimitée : tant qu'il y a de la mémoire de libre, on peut créer des objets dedans.
  
-ces deux zones mémoires sont le fruit d'une séparation logique de la mémoire du processus. Une mauvaise utilisation des pointeurs et de l'arithmétique associée peut amener à modifier le tas par accident. Ce genre d'erreur est difficile à traiter. Pour limiter ces risque, il est conseillé d'utiliser le moins possible des pointeurs nus.+ces deux zones mémoires sont le fruit d'une séparation logique de la mémoire du processus. Une mauvaise utilisation des pointeurs et de l'arithmétique associée peut amener à corrompre le tas par accident. Ce genre d'erreur est difficile à traiter. Pour limiter ces risque, il est conseillé d'utiliser le moins possible des pointeurs nus. C'est ce genre d'accès au tas qui est à l'origine des attaques par //buffer overflow//.
 ===== 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é choisiCette 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//.
pile_et_tas.1431027767.txt.gz · Dernière modification: 2015/05/07 21:42 par davidbrcz