Comment un nom de variable est-il stocké en C?

Je veux demander comment C les variables sont stockées dans C?

Pour être plus clair, considérez le code suivant:

int main() { int a = 1, b; b = a + 2; return 0; } 

Par exemple ici dans quelle mémoire C stocke les noms des emplacements variables.

Par exemple, si &a=0x12A7 (supposez) &b=0x123B1 , alors comment et où c stocke-t-il les noms de variables comme dans quel nom de mémoire a est stocké?

C ne stocke pas le nom des variables. C’est le compilateur qui stocke les noms des variables dans la table des symboles du compilateur.
Cette structure de données est créée et maintenue par le compilateur.
Exemple de table de symboles pour l’extrait de code

 // Declare an external function extern double bar(double x); // Define a public function double foo(int count) { double sum = 0.0; // Sum all the values bar(1) to bar(count) for (int i = 1; i <= count; i++) sum += bar((double) i); return sum; } 

peut contenir au moins le symbole suivant:

entrez la description de l'image ici

Les noms de variables ne doivent pas du tout être stockés! Le compilateur peut s’en débarrasser entièrement. Imaginez, si le compilateur est assez intelligent, il peut réduire tout votre programme à ceci:

 int main(){ return 0; } 

Notez que l’effet de ce programme est exactement le même que votre original, et maintenant il n’y a plus aucune variable! Pas besoin de les nommer maintenant, n’est-ce pas?

Même si les variables de votre code ont été réellement utilisées, leurs noms constituent une notation purement pratique lorsque vous écrivez le programme, mais le processeur n’a pas besoin de cela lorsqu’il exécute votre code. En ce qui concerne un microprocesseur, une fonction comme celle-ci:

 int foo(int x, int y) { int z = x + y; return z * 2; } 

Cela pourrait aboutir à un code compilé faisant cela, dans une architecture de jeu d’instructions simple hypothétique (ISA):

 ADD # consumes top two values on stack (x and y), pushes result (z) PUSH 2 # pushes 2 on stack MULT # consumes top two values on stack (z and 2), pushes result RET 

La plus longue histoire est que les noms de variables sont parfois stockés à des fins de débogage. Par exemple, si vous utilisez GCC, vous pouvez passer l’option -g pour émettre une “table de symboles” contenant des éléments tels que les noms de variables pour le débogage. Mais l’exécution d’un programme n’est pas nécessaire, elle n’est pas couverte par la norme de langue; c’est une fonctionnalité d’implémentation qui varie selon la plate-forme.

Ok, tout d’abord si vous ne faites que vous mettre dans la tête avec C, c’est ici que vous devez commencer: http://condor.cc.ku.edu/~grobe/intro-to-C.shtml

Mais c’est plus pratique que votre question. Pour répondre à cette question, nous demandons d’abord pourquoi les variables ont des adresses. Le pourquoi voici la stack. Pour qu’un programme fonctionne, les appels en retour doivent être dirigés vers la mémoire tampon appropriée afin que les éléments s’emboîtent comme prévu. Maintenant, à ce que je crois être la question initiale, voici comment l’adresse réelle est décidée. Pour répondre à cette question, vous devez comprendre comment le processeur implémente le tas.

https://en.wikipedia.org/wiki/Memory_management

“Etant donné que l’emplacement précis de l’allocation n’est pas connu à l’avance, l’access à la mémoire est indirectement effectué, généralement via une référence de pointeur. L’algorithme spécifique utilisé pour organiser la zone mémoire et allouer et désallouer des morceaux est lié au kernel …”

Ce qui nous ramène au côté pratique des choses avec l’abstraction à des pointeurs:

https://en.wikipedia.org/wiki/C_dynamic_memory_allocation

J’espère que cela vous donne une image un peu plus claire de ce qui est sous le capot:)

Bonne codding.