存储C语言变量名的哪一部分?

时间:2013-09-10 07:10:50

标签: c

存储C语言变量名的哪一部分?例如,Var_Name是变量名。我想知道这个Var_Name存储在内存部分的位置(代码,数据段等)

5 个答案:

答案 0 :(得分:12)

它没有存储在任何地方。变量名只是编译器的标签,在二进制代码中没有任何意义,因此它们被省略并被相关的存储器地址/寄存器取代。

答案 1 :(得分:6)

变量名称往往在无处存储在内存中的图像中。如果您启用了调试,则名称可能存在于可执行文件中,但它们并不是代码运行所必需的,因此它们几乎不会被加载到进程内存中。

在需要运行代码的位置,变量名称已被变量地址替换(绝对或相对于某个已知位置或相对于堆栈)。

可以将它们加载到内存中以用于不同的进程,例如,如果您正在使用调试器,但这不会使正在调试的应用程序可以访问它们。

答案 2 :(得分:2)

答案取决于您的目标文件格式。在大多数情况下,名称将被丢弃。一个值得注意的例外是导出符号,如共享库或DLL。

答案 3 :(得分:1)

C中没有存储变量名。当您创建C文件并对其进行编译时,它主要经历4个阶段(预处理,编译,汇编,链接)。这些阶段实质上将您的代码转换为机器在执行可执行文件时理解的语言。这些阶段用机器理解的地址替换你的名字。

答案 4 :(得分:0)

在C的情况下,这个名称被称为“标识符”,它们在标准中被提及(并且正如其名称所示,用于在代码中标识您的变量)。

您的编译器需要代码中的标识符来获取处理哪个变量的引用。但是在编译之后只有汇编代码(到目前为止你还没有处于调试模式)。这个所谓的目标文件只包含所说的唯一值(作为整数值,指令或函数)和地址,isntructiosn正在与之交互。

因此编译后不再需要标识符了。 至少不是用户没有明确需要它们。 (以前已经提到的debuging模式会是什么情况。