gpt4 book ai didi

assembly - 如何区分内存(堆)和堆栈地址

转载 作者:行者123 更新时间:2023-12-02 21:43:28 25 4
gpt4 key购买 nike

我的问题是:当我有这样的事情时:

lea rax, rbp - 8

//也许这是我的堆栈上的一个 int,因为我的代码中有一个本地“int”变量。当我这样做时,CPU 如何知道数据在哪里:

mov qword [rax], 14

我的意思是,它只是一个地址...如果我在 2^64 - x 处保留内存会怎样?

你分配的内存不能有这种地址吗?

或者如果堆栈不断增长直到其地址与分配的内存相同怎么办?

会发生这种情况吗?

汇编器不知道 rax 中的数字是什么,因此它不能是 MOVstack 和 MOVheap,就像近 JMP 和远 JMP 一样。

最佳答案

How does the CPU know, where the data is, when I do this mov qword [rax], 14

为什么CPU需要知道数据是在栈上还是堆上?两者都在同一个地方,即 RAM。

I mean, it's just an address... What if I had reserved memory at 2^64

如果地址大于您的地址空间,您将无法在那里保留内存。

Or what if the stack grew until it has the same addresses as your allocated memory ? Does that happen?

是的,它发生了,它被称为堆栈溢出:)并且很可能会导致段错误。

The Assembler doesn't know what the number in rax is, so it can't be a MOVstack and a MOVheap

据我所知,没有单独的指令来访问堆栈或堆,就像我说的,堆栈和堆都存在于 RAM 中。 CPU 关心的只是要写入或读取的地址,但是,在某些架构上,那些没有内存映射 I/O 的架构有用于访问 I/O 寄存器的特殊指令,大多数架构都会看到 I/O O 只是另一个内存地址。

你应该读一本关于计算机体系结构的书,我推荐这本 Computer Organization and Design, 4th Ed作者:帕特森。

关于assembly - 如何区分内存(堆)和堆栈地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13368128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com