我的问题是:当我有这样的事情时:
lea rax, rbp - 8
//也许这是我的堆栈上的一个int,因为我的代码中有一个本地“int”变量。 当我这样做时,CPU如何知道数据的位置:
mov qword [rax], 14
我的意思是,这只是一个地址......如果我在2^64 - x
保留了记忆怎么办?
你分配的内存不能有这种地址吗?
或者如果堆栈增长直到它与你分配的内存具有相同的地址呢?
这会发生吗?
汇编程序不知道rax中的数字是什么,所以它不能是MOVstack和MOVheap,就像远近的JMP一样。
答案 0 :(得分:5)
CPU如何知道数据的位置,当我这样做时,移动qword [rax],14
为什么CPU需要知道数据是在堆栈还是堆上?两者都在同一个地方,RAM。
我的意思是,它只是一个地址......如果我在2 ^ 64
预留了内存怎么办?
如果地址大于您的地址空间,您将无法在那里保留内存。
或者如果堆栈增长直到它与你的地址相同的话 分配内存?那会发生吗?
是的,它被称为stackoverflow :)并且很可能会导致分段错误。
汇编程序不知道rax中的数字是什么,所以它不能是a MOVstack和MOVheap
据我所知,有 no 单独的指令用于访问堆栈或堆,就像我说的那样,堆栈和堆都存在于RAM中。所有CPU关心的是写入或读取的地址,但是,在某些体系结构上,没有内存映射I / O的那些有访问I / O寄存器的特殊指令,大多数体系结构参见I / O只是另一个内存地址。
你应该读一本关于计算机体系结构的书,我推荐这篇由Patterson撰写的Computer Organization and Design, 4th Ed。