首先,我将展示对堆栈的理解不足,然后我将提出一个无法很好回答的略微连贯的问题,因为该问题不够具体,无法引出一个有条理的答案。
那么,当程序运行时,函数被压入堆栈——这意味着堆栈指针是递增还是递减?
堆栈内存分配中究竟存储了什么?指向变量数据的指针,指向程序 est 的指针?我只是不明白堆栈中到底存储了什么(什么数据类型,什么类型的引用,它们是如何存储的)我希望一个函数存储它的局部变量指针和一个指向调用它的地址的指针,以便它可以返回.
此外,windows x86 虚拟内存分配实际上将单个虚拟内存块映射到任意多个物理内存地址,因此堆栈在 windows x86 系统的物理内存中是连续的还是不连续的?
最后,假设堆栈存储在 x86 上 32 位窗口上的应用程序的用户分配的虚拟内存中,堆栈指针(引用内存的高地址还是低地址?)是 31 位的(31 是因为用户分配的并且高2GB保留给内核分配)小端引用,对吗?
当数据到达堆栈时(就像一个函数被输入并为一个新的 DWORD 分配内存)存储在该 DWORD 中的数据被推入堆栈并且堆栈指针是递增还是递减?系统如何同时感知堆栈的两端?
---- ESP在这里?
|-变量x的引用地址
|- 函数 1 中变量 x 的内存地址中要存储的整数数据
|----上面的功能1块^^
|
|
---- 还是这里的 ESP?
并且从这里引用地址和整数数据将被弹出到寄存器中,并且 mov 操作会将整数数据存储在分配的内存位置?
当新数据进入堆栈时,我听说堆栈“向下”增长,但这似乎不合理,因为只有更高和更低的内存地址 - 我知道只有堆栈的一端需要递增/递减,但它是高地址或低地址,堆栈长度(高度)如何分隔?当堆栈“增长”过大时,系统如何理解?
抱歉所有问题,但我已经做了很多阅读,用于描述我一直在阅读的概念的术语在我的词汇表中没有很好地操作。此外,我在谷歌、维基百科和这个网站上查了一下,找不到解决我具体问题的解释。
谢谢。