这个概念在C#中可能不太好理解,但在C/C++中就比较好理解了。
C/C++中有自动变量与指针变量的区别,即
int a = 10; //自动变量
int *a = new xxxx / malloc(xxx), *a = 10; //这是指针变量
二者的区别在存储方面主要在于自动变量位于栈上,指针变量在堆中。但对于编译器而言,其实都当作指针在处理,只是这个指针计算实际地址时算法不一样。
int a = 10
如果出现在方法里,几乎一定是一个栈上的变量,只在传说中看到过把它放到寄存器里。
如果没出现在方法里,也就是某个类的成员变量,它会指向堆上的一个32位地址,具体来说就是这个类的实例的内存地址+变量i在该类里的位置偏移量
还有一个特殊情况,如果出现在方法里、但它被闭包使用了,就会是一个自动生成类的实例的成员变量,也是指向堆上的一个地址
另两个传说是,如果它没有被使用会被优化掉;如果它没被赋值会被inline,我并没有亲见