堆栈和堆栈基地址

问题描述 投票:1回答:1

MEMORY_BASIC_INFORMATION结构中,我发现了两个PVOID变量,分别称为BaseAddressAllocationBaserespective。

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

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

AllocationBaseBaseAddress领域究竟有什么区别?我没有找到MSDN文档非常明确的解释,所以我希望有人可以澄清一点吗?

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

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

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

windows multithreading stack internals
1个回答
2
投票

MEMORY_BASIC_INFORMATION结构:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.