变量名如何存储在C中?

我想问一下C变量是如何存储在C中的?

为了更清楚,请考虑以下代码:

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

例如,这里存储器C存储可变位置的名称。

例如,如果&a=0x12A7 (假设) &b=0x123B1 ,那么c如何以及在何处存储变量名称,例如存储内存名称a

C不存储变量的名称。 它是在编译器的符号表中存储变量名称的编译器。
此数据结构由编译器创建和维护。
代码段的符号表示例

 // 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; } 

可能至少包含以下符号:

在此处输入图像描述

变量名称根本不需要存储! 编译器可以完全摆脱它们。 想象一下,如果编译器非常聪明,它可以将整个程序减少到:

 int main(){ return 0; } 

请注意,此程序的效果与原始程序完全相同,现在根本没有变量! 现在不需要命名,是吗?

即使代码中的变量实际被使用,在编写程序时它们的名称纯粹是一种方便的表示法,但在执行代码时处理器不需要它们。 就微处理器而言,这样的function如下:

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

在一些假设的简单指令集架构(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 

较长的故事是有时存储变量名称以用于调试目的。 例如,如果您正在使用GCC,则可以传递-g选项以发出“符号表”,其中包含用于调试的变量名称之类的内容。 但是不需要简单地运行一个程序,并且语言标准没有涵盖它 – 它是一个实现function,它因平台而异。

好吧首先,如果你刚刚开始使用C,这是从哪里开始: http : //condor.cc.ku.edu/~grobe/intro-to-C.shtml

但这比你的问题更实际。 要回答这个问题,我们首先要问为什么变量有地址 这里的原因是堆栈。 对于要操作的程序,必须将返回调用定向到适当的缓冲区,以便所有部分按设计方式组合在一起。 现在我认为是原始问题,即实际地址是如何决定的,对于答案,您必须了解处理器如何实现堆。

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

“由于事先不知道分配的精确位置,因此通常通过指针引用间接访问内存。用于组织内存区域以及分配和释放块的特定算法与内核相互关联……”

这让我们回到了指针抽象的实际方面:

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

希望tis让你更清楚地了解引擎盖下的内容:)

快乐的编码。