Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 堆栈和堆栈基址_Windows_Multithreading_Stack_Internals - Fatal编程技术网

Windows 堆栈和堆栈基址

Windows 堆栈和堆栈基址,windows,multithreading,stack,internals,Windows,Multithreading,Stack,Internals,在结构中可以找到两个PVOID变量,分别称为BaseAddress和AllocationBase 我正在读一本关于线程的书,书中详细介绍了如何将堆栈空间保留在堆栈上,但是有一点我不确定我是否理解正确 上面提到的结构中的基址是指向当前线程堆栈中的最高地址还是最低地址?由于堆栈向下生长,所以最低的堆栈位于顶部,最高的堆栈位于底部 AllocationBase和BaseAddress字段之间到底有什么区别?我不觉得MSDN文档很有解释性,所以我希望有人能进一步澄清一下 在我的书中,它还说'Alloca

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

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

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

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

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

每页,“DeallocationStack”为:最大堆栈大小存储在字段DeallocationStack中


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

内存\u基本信息
结构中:

  • BaseAddress—查询的内存页的地址(VirtualQuery(LPCVOIDlpAddress,…)
  • AllocationBase—已分配内存块的开头。它用于解除分配。BaseAddress>=AllocationBase

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

您能分享一下这本关于线程的书吗?:)谢谢。Joe Duffy的Windows并发编程。