comment trouver si la pile augmente vers le haut ou vers le bas?comment trouver si la pile augmente vers le haut ou vers le bas?
Répondre
Une possibilité est ...
#include <stdio.h>
void call(int *a)
{
int b;
if (&b > a)
printf("Stack grows up.\n");
else
printf("Stack grows down.\n");
}
int main()
{
int a;
call(&a);
return 0;
}
Cela suppose que le compilateur en question transmet des paramètres sur la pile et que les variables locales sont également attribuées à partir de la pile. Ce n'est pas garanti et c'est, en effet, assez inefficace. –
Cela dépend fortement de la façon dont le compilateur implémente les appels de fonction et les variables locales. – tur1ng
Je voudrais ajouter '\ n' à la fin des chaînes. – ndim
approche Brute force est de remplir votre mémoire avec une valeur connue dire 0xFF. Poussez quelques objets sur la pile. Faites un vidage de la mémoire. Poussez plus d'objets sur la pile. Faites un autre vidage de mémoire.
Ceci est très dépendant de la plate-forme, et même dépendant de l'application.
Le code affiché par Vino ne fonctionne que dans les cibles où les paramètres sont transmis sur la pile ET les variables locales sont allouées à partir de la pile, dans cet ordre. De nombreux compilateurs attribuent des adresses mémoire fixes aux paramètres ou transmettent des paramètres dans des registres. Bien que commun, le fait de passer des paramètres sur la pile est l'un des moyens les moins efficaces d'obtenir et de retirer des données d'une fonction.
Regardez le désassemblage de votre application compilée et voyez quel code est généré par le compilateur. Si votre cible dispose de commandes de manipulation de pile natives (telles que PUSH et POP) que le compilateur utilise, le document de documentation/référence de la CPU vous indiquera dans quelle direction la pile se développe. Cependant, le compilateur peut choisir d'implémenter sa propre pile, auquel cas vous devrez faire quelques recherches. Ou, lisez le pointeur de la pile, poussez quelque chose sur la pile et relisez le pointeur de la pile. Comparez les résultats de la première et de la deuxième lecture pour déterminer la direction dans laquelle le pointeur se déplace.
Pour référence future: si vous incluez quelques détails sur votre architecture cible (embarqué? PC? Linux, Windows? GCC? VC? Watcom? Blah blah blah) vous obtiendrez des réponses plus significatives.
+1 pour la première déclaration. –
Créer une fonction avec de nombreuses variables locales.
Désactiver les optimisations. Soit vous imprimez le langage d'assemblage. Ou lors du débogage, affichez en tant que source mixte et langage d'assemblage. Notez le pointeur (ou le registre) de la pile avant l'exécution de la fonction. Parcourez une seule fois la fonction et observez le pointeur de la pile.
En général, le fait qu'un compilateur utilise des pointeurs de pile incrémentés ou décrémentés est un problème mineur tant que le problème est cohérent et fonctionne. C'est une question qui occupe rarement mon esprit. J'ai tendance à me concentrer sur des sujets plus importants, tels que la qualité, la correction et la robustesse. Je vais faire confiance au compilateur pour gérer correctement la manipulation de la pile. Je ne fais pas confiance aux fonctions récursives, en particulier sur les plateformes intégrées ou restreintes.
- 1. Comment détecter: défilement vers le haut ou vers le bas?
- 2. Comment savoir si XUL menupopup s'ouvre vers le haut ou vers le bas?
- 3. Comment déplacer le pointeur vers le haut ou vers le bas sur plusieurs lignes avec Emacs?
- 4. Glissement vers le haut/vers le bas d'un contrôleur UINavigation
- 5. WPF Arbre logique - bas vers le haut par rapport haut vers le bas
- 6. Flèches du clavier vers le haut et vers le bas
- 7. Obtenir un UITableView pour faire défiler vers le haut/snap vers le bas, pas le haut
- 8. dossier de promenade, bas vers le haut
- 9. Fonction ronde MATLAB - comment arrondit-elle .5 vers le haut ou vers le bas?
- 10. Jquery table de déplacement ligne vers le haut ou vers le bas ou déplacer X
- 11. Slide vers le bas vers le bas android
- 12. ArrayCollection flexible ArrayCollection d'une position vers le haut ou vers le bas par une position
- 13. GridView Icône de direction de tri vers le haut ou vers le bas?
- 14. Div échelle vers le haut, au lieu de vers le bas?
- 15. Comment simuler face vers le haut et face vers le bas dans le simulateur de l'iPhone
- 16. jQuery glisser vers le haut/bas sur le bug stationnaire
- 17. Déplacer vers le haut et Déplacer vers le bas les éléments dans la zone de liste
- 18. déplacer le curseur vers le haut/bas dans UITextView
- 19. Comment déplacer un élément vers le haut et vers le bas dans un wxListCtrl (wxWidgets)
- 20. lignes de déplacer vers le haut et vers le bas dans le tableau html
- 21. MouseWheel, déterminant les événements de défilement vers le haut et vers le bas
- 22. Palm vers le bas action
- 23. souris vers le bas et se déplace vers le bas
- 24. Prise en flèche vers le haut/vers le bas comme entrée d'un programme sous Unix
- 25. Jquery glisser vers le haut et vers le haut avec des flèches
- 26. Utilisation de javascript pour faire défiler l'iframe vers le haut et vers le bas
- 27. Élément Jquery DIV Faites défiler vers le haut et vers le bas?
- 28. Les lignes de séparation de cellules horizontales UITableView ne défilent pas vers le haut ou vers le bas
- 29. en utilisant + et - ou le triangle pointant vers la droite ou vers le bas?
- 30. jQuery Sortable Bouton de déplacement vers le haut/vers le bas
duplication possible http://stackoverflow.com/questions/1677415/does-stack-grow-upward-or-downward –