Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
615 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  pile et programme

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

pile et programme

n°1840050
weblook$$
Posté le 19-01-2009 à 15:55:22  profilanswer
 

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
mood
Publicité
Posté le 19-01-2009 à 15:55:22  profilanswer
 

n°1840080
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-01-2009 à 16:35:44  profilanswer
 

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


---------------
J'ai un string dans l'array (Paris Hilton)
n°1840083
0x90
Posté le 19-01-2009 à 16:38:02  profilanswer
 

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


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1840084
masklinn
í dag viðrar vel til loftárása
Posté le 19-01-2009 à 16:39:47  profilanswer
 

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
n°1840126
weblook$$
Posté le 19-01-2009 à 17:23:22  profilanswer
 

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 ?

n°1840155
Taz
bisounours-codeur
Posté le 19-01-2009 à 18:07:41  profilanswer
 

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.

n°1840162
weblook$$
Posté le 19-01-2009 à 18:25:17  profilanswer
 

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

n°1840168
masklinn
í dag viðrar vel til loftárása
Posté le 19-01-2009 à 18:53:30  profilanswer
 

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
n°1840169
weblook$$
Posté le 19-01-2009 à 18:54:22  profilanswer
 

merci

n°1840170
weblook$$
Posté le 19-01-2009 à 18:59:16  profilanswer
 

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

mood
Publicité
Posté le 19-01-2009 à 18:59:16  profilanswer
 

n°1848753
youen
Posté le 08-02-2009 à 22:18:30  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  pile et programme

 

Sujets relatifs
besoin d'aide pour ecrire un programme en c[C]programme affichant la suite d'operation pour trier une liste.
Erreur dans un programme basique en CPause dans programme pour faire une action
programme pour borne bleutoothProblème d'exec() d'un programme C++ sous PHP
Traduction de [IDL] en [Matlab] d'un petit programmeBesoin de votre aide pour la réalisation d'un programme
Alléger un programme pour éviter de faire exploser la pile. 
Plus de sujets relatifs à : pile et programme


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR