1

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

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

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

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

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

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

有人可以帮我理解我的困惑吗?

4

1 回答 1

2

MEMORY_BASIC_INFORMATION结构上:

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

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

于 2010-07-05T06:54:11.823 回答