堆栈和堆栈基地址

Posted

技术标签:

【中文标题】堆栈和堆栈基地址【英文标题】:Stack and Stack Base Address 【发布时间】:2011-03-11 10:22:10 【问题描述】:

在MEMORY_BASIC_INFORMATION 结构中可以找到两个PVOID 变量,分别称为BaseAddressAllocationBase

我正在阅读一本关于线程的书,它详细介绍了如何将堆栈空间留在堆栈上,但是我不确定我是否理解正确。

上述结构中的BaseAddress,是指向当前线程栈的最高地址还是最低地址?由于堆栈是向下增长的,因此最低的在顶部,最高的在底部。

AllocationBaseBaseAddress 字段之间到底有什么区别?我觉得 MSDN 文档的解释性不是很好,所以我希望有人能澄清一下?

在我的书中它还说“AllocationBase”地址与 TEB 结构中的“DeallocationStack”字段相同,它指向堆栈的末尾,我认为这是最高地址,但是因为它的BASE,我猜它应该是最低地址,因为堆栈向下增长。所以我有点困惑是什么?

每个this页面,'DeallocationStack'是:最大堆栈大小存储在字段DeallocationStack中

谁能帮我理解我的困惑?

【问题讨论】:

你能分享一下这是什么关于线程的书吗? :) 谢谢。 Joe Duffy 在 Windows 上进行并发编程。 【参考方案1】:

MEMORY_BASIC_INFORMATION 结构中:

BaseAddress - 查询到的内存页的地址(VirtualQuery(LPCVOID lpAddress,...)。 AllocationBase - 分配内存块的开始。它用于解除分配。 BaseAddress >= AllocationBase。

如果您正在查询堆栈,那么 AllocationBase 将是堆栈的最低地址(堆栈顶部)。

【讨论】:

以上是关于堆栈和堆栈基地址的主要内容,如果未能解决你的问题,请参考以下文章

如何找出堆栈的开始和结束的地址?

ARM的堆栈方式

atpcs中规定使用哪个寄存器存放堆栈基地址

关于堆栈的计算!

malloc() |堆栈和堆位置的内存地址长度的差异| C 编程

堆栈地址和堆地址之间的关系?