pile et programme

pile et programme - C++ - Programmation

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
Reply

Marsh Posté le 19-01-2009 à 15:55:22   

Reply

Marsh Posté le 19-01-2009 à 16:35:44    

Une pile, dont les extrémités sont pointées par ESP et EBP


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 19-01-2009 à 16:38:02    

On peut créer des piles en plus avec des threads aussi [:cupra]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

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 [:pingouino]
(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)


Message édité par masklinn le 19-01-2009 à 16:40:55

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

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 :D) 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 ?

Reply

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 :D) 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.

Reply

Marsh Posté le 19-01-2009 à 18:25:17    

parceque avec une petit exemple y a un truc qui m'échappe :
 

Code :
  1. int main()
  2. {
  3. int a=1,b;
  4. b=f(a);
  5. }
  6. int f(int a2)
  7. {
  8. int c=1;
  9. return c+a2;
  10. }


 
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...

Reply

Marsh Posté le 19-01-2009 à 18:53:30    

weblook$$ a écrit :

parceque avec une petit exemple y a un truc qui m'échappe :
 

Code :
  1. int main()
  2. {
  3. int a=1,b;
  4. b=f(a);
  5. }
  6. int f(int a2)
  7. {
  8. int c=1;
  9. return c+a2;
  10. }


 
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...


http://en.wikipedia.org/wiki/X86_calling_conventions


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 19-01-2009 à 18:54:22    

merci

Reply

Marsh Posté le 19-01-2009 à 18:59:16    

a oui en effet j'avais oublié les registres...

Reply

Marsh Posté le 19-01-2009 à 18:59:16   

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed