|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Expert Confirmé
![]() Date d'inscription: juillet 2003
Localisation: Bordal
Âge: 26
Messages: 1 556
|
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). |
|
|
|
|
|
#2 | |||||||
![]() Date d'inscription: décembre 2003
Localisation: Paris
Âge: 53
Messages: 14 580
|
Citation:
Citation:
Citation:
'auto' -> mémoire automatique (pile) 'static' -> mémoire statique Citation:
Citation:
Citation:
Citation:
__________________
Pas de Wi-Fi à la maison : CPL Des infos sur la programmation et le langage C: http://bien-programmer.blogspot.com/ http://www.bien-programmer.fr/ http://bien-programmer.forum-actif.net/forum.htm |
|||||||
|
|
|
|
#3 |
|
Expert Confirmé
![]() Date d'inscription: juillet 2003
Localisation: Bordal
Âge: 26
Messages: 1 556
|
Merci pour ces eclaircissements.
Ce thread pourrait partir en debat "pour ou contre malloc" car je suis assez anti-malloc. Mais si tu dis que mettre de trop gros objets dans la pile engendre des especes d'allocations dynamiques, ça redore effectivement le blason du malloc. Pourquoi je suis anti malloc * C'est vraiment source de problèmes. Un free qu'on fait 2 fois, une lecture ou ecriture apres un free, un free qu'on oblie... * S'amuser à tester le retour du malloc avec NULL rajoute de la complexité et allourdit le code. A t on vraiment envie de prevoir quelquechose si malloc echoue? Qui dans la salle a deja eu un malloc retournant NULL? * On peut pas utiliser sizeof() pour connaitre la taille du tableau de caracteres alloué. J'utilise beaucoup sizeof() dans les snprintf, strncpy et fgets. (ca s'applique bien sur qu'aux tableaux de caracteres pour y mettre du texte, apres pour les objets, on peut toujours utiliser sizeof) |
|
|
|
|
|
#4 | |||
![]() Date d'inscription: décembre 2005
Âge: 29
Messages: 4 379
|
Citation:
Comme l'écrirait Emmanuel: Code :
free(ptr) , ptr = NULL; Citation:
Citation:
Jc |
|||
|
|
|
|
#5 | |
![]() |
Citation:
Franchement, s'il y'a bien un truc à maïtriser, c'est bien l'allocation dynamique et ce va de soi .... les pointeurs ! |
|
|
|
|
|
#6 | ||||||
![]() Date d'inscription: décembre 2003
Localisation: Paris
Âge: 53
Messages: 14 580
|
Citation:
Citation:
Citation:
http://mapage.noos.fr/emdel/clib.htm Module SYSALLOC qui est à la disposition de la communauté. Citation:
Citation:
Citation:
Pour te faire aimer malloc() : http://mapage.noos.fr/emdel/clib.htm
__________________
Pas de Wi-Fi à la maison : CPL Des infos sur la programmation et le langage C: http://bien-programmer.blogspot.com/ http://www.bien-programmer.fr/ http://bien-programmer.forum-actif.net/forum.htm |
||||||
|
|
|
|
#7 |
|
Expert Confirmé
![]() Date d'inscription: juillet 2003
Localisation: Bordal
Âge: 26
Messages: 1 556
|
( haha, comment ils sont furieux
Hey, je dis pas qu'on peut se passer de malloc, je voulais dire que c'est pas parce qu'on sait faire de l'allocation dynamique qu'il faut l'utiliser à chaque fois. J'ai été adepte du malloc, mais aujourd'hui je sais que le code le plus simple est le mieux. |
|
|
|
|
|
#8 | |
![]() Date d'inscription: décembre 2003
Localisation: Paris
Âge: 53
Messages: 14 580
|
Citation:
__________________
Pas de Wi-Fi à la maison : CPL Des infos sur la programmation et le langage C: http://bien-programmer.blogspot.com/ http://www.bien-programmer.fr/ http://bien-programmer.forum-actif.net/forum.htm |
|
|
|
|
|
#9 |
|
Expert Confirmé
![]() Date d'inscription: juillet 2003
Localisation: Bordal
Âge: 26
Messages: 1 556
|
^^
Bon j'ai posé la question sur la mailing list gcc .. Si j'ai pensé que la pile était limitée en taille c'est parce que du temps de ma jeunesse ou j'utilisais borland c++, on pouvait choisir la "taille" de son executable et configurer je crois la taille de la pile Et aussi, j'avais fait un peu d'assembleur (x86) et je me souviens qu'on pouvait definir la aussi les differentes tailles des segments et de la pile. |
|
|
|
|
|
#10 |
|
Expert Confirmé Sénior
![]() |
La pile est bel et bien limitée en taille.
Sous Windows par exemple, on spécifie la taille lors d'un CreateThread(), (ou à l'édition de lien pour le premier thread) et la taille par défaut fait 1 Mo. Si on dépasse, on a droit à l'exception EXCEPTION_STACK_OVERFLOW (ce n'est pas une exception C++) |
|
|
|
|
|
#11 |
|
Expert Confirmé
![]() Date d'inscription: juillet 2003
Localisation: Bordal
Âge: 26
Messages: 1 556
|
Ok, merci, c'est ce qu'on m'a repondu aussi sur la mailing list.
La commande linux "limit" donne la taille de la pile pour tout programme et elle était de 8Mo pour moi. |
|
|
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() Date d'inscription: décembre 2003
Localisation: Bordeaux
Messages: 3 527
|
Citation:
__________________
Boost ftw |
|
|
|
|
|
|
#13 | ||
![]() Date d'inscription: décembre 2003
Localisation: Paris
Âge: 53
Messages: 14 580
|
Citation:
__________________
Pas de Wi-Fi à la maison : CPL Des infos sur la programmation et le langage C: http://bien-programmer.blogspot.com/ http://www.bien-programmer.fr/ http://bien-programmer.forum-actif.net/forum.htm |
||
|
|
|
|
#14 |
|
Expert Confirmé Sénior
![]() Date d'inscription: décembre 2003
Localisation: Bordeaux
Messages: 3 527
|
Ça marche uniquement sous linux x86, x86_64 et ppc.
Ça travaille directement avec les binaires, c'est indépendant du langage de programmation, donc a priori aussi de la libc. Et c'est sous GPL. Valgrind est une suite complète de qualité pour déboguer et profiler des programmes sous linux. Si le programme n'a pas trop de code qui dépend de la plateforme, déboguer sous linux suffit.
__________________
Boost ftw |
|
|
|
|
|
#15 |
![]() |
Oui mais là ca reste surtout uniquement pour Linux, ce qui n'est pas top, pour ce genre de d'outils le must reste quand même la possibilité de portabilité !
|
|
|
|
|
![]() |
||
GCC - A propos de la pile
|
||
| Outils de la discussion | |
|
|