Java 原语被分配了内存地址吗?
我试图理解在后台声明和分配原语类型的过程Java 原语被分配了内存地址吗?,java,primitive,Java,Primitive,我试图理解在后台声明和分配原语类型的过程 inti i=3 对于1),它在内存堆栈上分配一个空间,用于存储名为i的int类型值 对于2),它将值3指定给上面保留的空间 那里有内存地址吗? 根据我的印象,内存地址总是与堆上的对象相关联 更新: 关于答复: 因此,对于堆栈上的每个变量,它们都被分配了一个内存地址,就像堆上的对象一样。我说得对吗 但是,对于java,情况不是这样的, 假设你在谈论C或C++(我不能告诉),是的。您可以这样访问地址: int i = 3; int *k = &i
inti代码>
i=3代码>
int i = 3;
int *k = &i; // k now is a pointer to i
*k = 4; // assigns the value k points to (i) to 4, i is now 4
堆栈缓冲区溢出是如何发生的?:)一定有人在向堆栈指针写入数据。并不总是涉及地址。如果编译器发现程序员从未使用过变量的地址,则可以将变量放入寄存器。因此,您不需要访问主内存。例如,在上面的代码中,编译器可以生成
add $2, $0, 3
将值3放入寄存器2中。一旦你创建了一个指针并使它指向那个变量,那么实际上你就有了一个地址。然后变量就不能再只在寄存器中了。实际上堆栈是进程虚拟内存的特殊区域,所以堆栈中的所有内容都有内存地址。由ESP(SP)注册表(x86体系结构)持有的堆栈头。堆栈地址通常低于内存地址,因为堆栈的位置更靠近进程虚拟内存的起点,然后是堆