我试图理解一个原始类型在后台的声明和赋值过程。
int i;
i = 3;
对于1),在内存栈上分配了一 block 空间,用来存放一个名为i的int类型值 对于2),它把值3赋给上面保留的空间
那里有内存地址吗? 在我的印象中,内存地址总是与堆上的对象相关联?
更新:
关于回复:
因此,对于堆栈上的每个变量,它们都被分配了一个内存地址,就像堆上的对象一样。我说得对吗?
但是对于Java,不是这样的吗?
最佳答案
并不总是涉及地址。如果编译器发现它们的地址从未被程序员使用,则编译器可以将变量放入寄存器。所以你不需要访问主内存。例如,在您上面的代码中,编译器可以生成的内容可以像
这样简单add $2, $0, 3
将值 3 放入寄存器 2。一旦您创建了一个指针并使其指向该变量,那么实际上您就有了一个地址。然后变量不能再只在寄存器中。
关于java - 原语是否分配了内存地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/316194/