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