pile et programme - C++ - Programmation
Marsh Posté le 19-01-2009 à 16:35:44
Une pile, dont les extrémités sont pointées par ESP et EBP
Marsh Posté le 19-01-2009 à 16:38:02
On peut créer des piles en plus avec des threads aussi
Marsh Posté le 19-01-2009 à 16:39:47
Il y a confusion entre "pile" et "pile d'appel" là, un peu. C'est pas parce qu'il n'y a qu'une pile d'appel (par défaut, quand on ne fait pas de multithreading/multiprocessing) qu'il n'y a qu'une pile
(même si les données locales sont souvent stockées dans la pile servant aussi pour les appels)
(c'est pas obligatoire ça, d'ailleurs)
Marsh Posté le 19-01-2009 à 17:23:22
en C++ par exemple , un programme peut donc avoir une pile pour gérer les appels de fonctions (arguments à empiler et dépiler pour passer du scope main au scope fonction, valeur de retour de la fonction à mettre...euh, queleque part ) et une pile pour gérer les données local aux fonctions ? plusieurs fonctions partagent la même et unique pile donc pour stocker leurs variables locales ?
Marsh Posté le 19-01-2009 à 18:07:41
weblook$$ a écrit : en C++ par exemple , un programme peut donc avoir une pile pour gérer les appels de fonctions (arguments à empiler et dépiler pour passer du scope main au scope fonction, valeur de retour de la fonction à mettre...euh, queleque part ) et une pile pour gérer les données local aux fonctions ? plusieurs fonctions partagent la même et unique pile donc pour stocker leurs variables locales ? |
à froid je ne vois pas trop ce qui interdirait d'implémenter comme ça.
mais la vision pile/tas/etc c'est une vision théorique, au final, c'est toujours juste des plages mémoires dans ton processus auxquelles on colle des étiquettes. c'est l'usage qui fait la différence.
Marsh Posté le 19-01-2009 à 18:25:17
parceque avec une petit exemple y a un truc qui m'échappe :
Code :
|
pile une fois dans f avant le return :
c
a2
adresse de retour de f
a
et justement au niveau du return comment fait-il pour empiler c+a2 et savoir ou shopper l'instruction suivante, c'est à dire le retour de la fonction ??
Avec une seule pile ça me parait tendu du sphincter un peu...
Marsh Posté le 19-01-2009 à 18:53:30
weblook$$ a écrit : parceque avec une petit exemple y a un truc qui m'échappe :
|
http://en.wikipedia.org/wiki/X86_calling_conventions
Marsh Posté le 08-02-2009 à 22:18:30
sans passer par des registres, je crois que la méthode "classique" est de réserver l'emplacement pour la valeur de retour avant d'appeler la fonction (donc entre "a" et "adresse de retour de f" dans ton exemple), et la fonction f mettra son résultat à cet endroit.
Marsh Posté le 19-01-2009 à 15:55:22
SAlut,
Dans un programme, y a qu'une pile en tout et pour tout ?
Ou est ce que le fait de déclarer une fonction, va créer une pile juste pour cette fonction avec l'histoire des arguments à stockés sur la pile etc
Donc une pile ou plusieurs piles ?
MercI.
Message édité par weblook$$ le 19-01-2009 à 17:32:44