结论

对于<font style="color:#121212;"> C/C++</font> 这种编译成机器代码的语言:变量名不需要储存,所有的局部变量读写都会变成(栈地址 + 偏移)的形式。 变量是内存地址的别名,指代的是内存地址里面存储的值

变量名不占空间

变量

用来标识(identify)一块内存区域,这块区域的值一般是可以更改的,这就是它“变”的由来,但是我们可以通过使用如const等一些修饰符号来限定这一内存区域的操作特性(characteristic),即变量的操作特性。用const修饰的使变量不能更改的就和常量一样的变量叫做常变量。

变量地址的别名..就像刚生的小孩,你只知道他在地球上的某个位置,而不能叫出他名字,给你取个名

变量名

是一个标识符(identifier),用来指代一块内存区域,即变量,使用变量使我们操作内存以区域(area),以块(block)为单位,提高了方便性。

你的机器代码中,是不会出现变量名的;变量名是给我们程序员操作内存来使用的。

想想在汇编年代,没有变量名,我们操作内存,都是用地址来直接操作的,还要控制区域大小;当然汇编语言已经有了简单的变量。

int a = 5 发生了什么

定义 int a 时,编译器分配4个字节内存,并命名该4个字节的空间名字为a(即变量名),当用到变量名a时,就是在使用那4个字节的内存空间.

5是一个常数,在程序编译时存放在代码的常量区存放着它的值(就是5),当执行a=5时,程序将5这个常量拷贝到a所在的4个字节空间中,就完成了赋值操作.

a是我们对那个整形变量的4个字节取的”名字”,是我们人为给的,实际上计算机并不存储a这个名字,只是我们编程时给那4个字节内存取个名字好用。

实际上程序在编译时,所有的a都转换为了那个地址空间了.编译成机器代码后,没有a这个说法了.a这个名字只存在于我们编写的代码中.

参考资料

变量名储存在哪里,变量的储存机制是什么? - 知乎