Bonjour,
je voudrais savoir où sont stockées les noms des variables ? Dans les registres ?
Merci.
Bonjour,
je voudrais savoir où sont stockées les noms des variables ? Dans les registres ?
Merci.
Les noms de variables ne sont pas stockées (ça n'a d'ailleurs pas beaucoup de sens de garder leur nom ) , les variables sont par contre stockée sur la pile.
Bonsoir,
Les variables, certes, sont stockées sur la pile, mais de façon temporaire. Je m'explique, à chaque fois que vous déclarez une variable, celle-ci est placée/mise sur la pile et à chaque fois que l'instruction a été exécutée ou que votre fonction a fini sa tâche, toutes les variables poussées sur la pile sont libérées. En d'autres termes, elles sont supprimées de la pile, mais existent uniquement quand la fonction dans laquelle est a été créé est en cours d'exécution, donc perdues. Lorsqu'une variable de la pile est libérée, l'endroit où elle est stockée est disponible pour d'autres variables. Par conséquent, les variables de la pile sont donc de nature locale (sans rentrer dans les détails, cela est lié au concept de portée variable).
Pour résumer, la pile est une région spécifique de la mémoire de votre ordinateur qui stocke les variables temporaires créées par chaque fonction (cela est valable également pour la fonction main). La pile en elle-même est une structure de données en "LIFO ", c'est-à-dire "dernier entré, premier sorti" géré par le CPU de manière très précise. Donc vous aurez compris, la pile s'agrandit et se rétrécit il n'est donc pas nécessaire que vous gériez la mémoire vous-même. Les variables sont allouées et libérées automatiquement.
Cependant, il faut faire attention. La pile a des limites : cela dépend de votre architecture et système d'exploitation. La taille de la pile est limitée (tout comme la taille des types de vos variables), ce qui n'est pas le cas pour le tas qui n'a pas ce problème (plutôt d'ordre physique donc lié à la mémoire physique réelle).
À bientôt
Celui qui peut, agit. Celui qui ne peut pas, enseigne.
Il y a deux sortes de savants: les spécialistes, qui connaissent tout sur rien,
et les philosophes, qui ne connaissent rien sur tout.
George Bernard Shaw
Une fois compilé, un programme n'intègre plus les noms de variables. Celles-ci sont transformé en adresses mémoires appelés par les instructions du CPU. Le CPU va lire ou écrire ces adresses ou le contenu de la mémoire à ces adresses dans ses registres pour effectuer ses traitements.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
Il faut quand même noter qu'un programme compilé avec les informations de debug contient des informations à propos de fonctions, variables et autres types. Notamment des noms.
oui, mais cela ne fait pas vraiment partie du programme, c'est des méta-données qui sont en plus supprimable avec la commande strip.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
l'adressage c'est quand on met le & ?
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int main() { int nb printf("\n Saisir un entier nb"); scanf("%d",&nb); }
une variable est une zone mémoire réservée. La taille de cet emplacement dépendant du type de la variable.
En C, le fait de mettre un & devant un nom de variable va permettre d'utiliser son adresse plutôt que son contenu. C'est un cas particulier. Dans l'exemple, scanf attend l'adresse d'une variable et non celle-ci.
Pour aller plus loin, il faut connaitre les pointeurs.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
Bonjour, merci pour ta réponse
Pour l'instant notre prof nous a dit que c'était trop compliqué pour nous et que nous n'en étions pas encore là, y'a t-il lien pointeur-mémoire ?
En C, un pointeur est une variable qui contient une adresse mémoire. Si tu veux en savoir plus, lis le lien que j'ai mis.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
bonjour
il peut y avoir plusieurs pile par programme ?
merci
Il n'y a qu'une seule pile par programme.
Plus exactement, il y a un contexte par thread. On peut donc avoir « plusieurs piles » par processus.
Et sur un OS qui supporte les fibres (comme les Windows récents) on peut avoir une pile par fibre.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager