GCC - A propos de la pile
Salut,
Je me demandais comment on faisait pour savoir combien de taille de pile alloue gcc à un programme. Est-ce une taille fixe (et parametrable) ou bien il la determine tout seul en fonction des variables locales qu'il trouve?
Je crois savoir que les variables locales sans classe de mémorisation sont dites "automatiques" et d'apres moi, elles sont mises en "static" si le compilateur estime que yaura pas assez de place pour une telle variable dans la pile. Mais en fait j'en sais rien.
Est il possible de savoir ce que le compilateur fait des grosses variables locales? Car je crois qu'une taille typique de pile est de l'ordre de 2Ko, un buffer de 10Ko ne rentrerait pas.
Je cherche juste à faire des economies de memoire dans le segment de données et donc ces temps ci je privilegie la pile (buffers non static donc).
Re: GCC - A propos de la pile
Citation:
Envoyé par Gruik
Je me demandais comment on faisait pour savoir combien de taille de pile alloue gcc à un programme.
Il n'y a pas de réponse portable, et c'est un vrai problème.
Citation:
Est-ce une taille fixe (et parametrable) ou bien il la determine tout seul en fonction des variables locales qu'il trouve?
Ca déoend de l'implémentation. C'est souvent automatique, c'est à dire que la mémoire libre (le tas) est attaqué d'un coté par la pile et de l'autre par les malloc(). Il peut on non y avoir un contrôle... Ne pas compter dessus. Il peut aussi y avoir une pile par thread, par processus, par interruption... C'est très complexe et hors de la portée du programmeur C.
Citation:
Je crois savoir que les variables locales sans classe de mémorisation sont dites "automatiques" et d'apres moi, elles sont mises en "static"
Euh non.
'auto' -> mémoire automatique (pile)
'static' -> mémoire statique
Citation:
si le compilateur estime que yaura pas assez de place pour une telle variable dans la pile. Mais en fait j'en sais rien.
Ben non. Ca interdirait la récursion, les appels imbriquées, le multi-threads...
Citation:
Est il possible de savoir ce que le compilateur fait des grosses variables locales?
local = auto. Si ça casse, c'est de la faute du programmeur. La mémoire allouée est là pour ça.
Citation:
Car je crois qu'une taille typique de pile est de l'ordre de 2Ko, un buffer de 10Ko ne rentrerait pas.
Il n'y a pas de 'taille typique'. Ca peut aller de quelques bytes à plusieurs méga...
Citation:
Je cherche juste à faire des economies de memoire dans le segment de données et donc ces temps ci je privilegie la pile (buffers non static donc).
Mauvaise idée. malloc()/free() sont tes amis dès qu'un objet local dépasse une 100aine de bytes (au pif).