堆栈和堆栈基地址

时间:2010-07-03 12:28:22

标签: windows multithreading stack internals

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

我正在阅读一本关于线程的书,它正在讨论如何将堆栈空间留在堆栈中的相当详细的内容,但有些东西我不确定我是否正确理解。

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

AllocationBaseBaseAddress字段之间究竟有什么区别?我没有发现MSDN文档非常具有说明性,所以我希望有人能澄清一点吗?

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

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

有人能帮助我理解我的困惑吗?

1 个答案:

答案 0 :(得分:2)

MEMORY_BASIC_INFORMATION结构中:

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

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