Winapi Windows堆栈和堆地址范围

Winapi Windows堆栈和堆地址范围,winapi,memory,process,stack,heap,Winapi,Memory,Process,Stack,Heap,到目前为止,在使用Linux时,堆栈地址非常高,而堆地址非常低(通过使用C程序打印堆和堆栈地址可以看出),Win32进程内存布局存在问题。MWSDN说堆栈地址高于堆地址,但从实践中我看到,堆栈地址低于堆地址。所以我很困惑。请有人解释一下。Hm,堆栈地址高于堆地址——这根本不是真的。堆栈和堆都可以驻留在Windows上进程地址空间的任何位置 如果启动大量线程,进行大量堆分配并加载数百个DLL,您会发现所有这些对象都均匀分布在地址空间中 此图显示Windows上典型32位进程中虚拟分配的结构。绿色

到目前为止,在使用Linux时,堆栈地址非常高,而堆地址非常低(通过使用C程序打印堆和堆栈地址可以看出),Win32进程内存布局存在问题。MWSDN说堆栈地址高于堆地址,但从实践中我看到,堆栈地址低于堆地址。所以我很困惑。请有人解释一下。

Hm,
堆栈地址高于堆地址
——这根本不是真的。堆栈和堆都可以驻留在Windows上进程地址空间的任何位置

如果启动大量线程,进行大量堆分配并加载数百个DLL,您会发现所有这些对象都均匀分布在地址空间中


此图显示Windows上典型32位进程中虚拟分配的结构。绿色表示空闲区域,蓝色表示分配了某些内容。活动主要发生在地址空间的开头,但在其他地址范围中也存在活动。

Hm,
堆栈地址高于堆地址
-这根本不是真的。堆栈和堆都可以驻留在Windows上进程地址空间的任何位置

如果启动大量线程,进行大量堆分配并加载数百个DLL,您会发现所有这些对象都均匀分布在地址空间中


此图显示Windows上典型32位进程中虚拟分配的结构。绿色表示空闲区域,蓝色表示分配了某些内容。活动主要发生在地址空间的开头,但在其他地址范围中也会发生。

您可以注意到,所有线程上的所有堆栈地址都位于地址空间的较低部分,而堆分配位于较高的地址中。我想知道这对Windows是否正常。若并没有,那个么它在哪里说出来并给出更多的细节呢?看看你们可以知道堆更高,但它不是。我明白了。它们给出了简单进程的内存布局示例。是的,如果您将加载2-3个DLL并启动一个线程,99%的可能性您将拥有布局,类似于这些示例(顺便说一句,在Win7上它可能很容易与XP不同)。但在承载数百个线程的大型服务器进程中,您可以使用任何布局。MSDN文章仅适用于:Microsoft®Windows®CE.NET、Microsoft Windows CE 3.0、Pocket PC 2002.5。我根据自己使用服务器和客户端版本Windows的经验撰写了自己的评论。我知道这些系统是如何工作的。您可以注意到,所有线程上的所有堆栈地址都位于地址空间的较低部分,而堆分配位于较高的地址。我想知道这对Windows是否正常。若并没有,那个么它在哪里说出来并给出更多的细节呢?看看你们可以知道堆更高,但它不是。我明白了。它们给出了简单进程的内存布局示例。是的,如果您将加载2-3个DLL并启动一个线程,99%的可能性您将拥有布局,类似于这些示例(顺便说一句,在Win7上它可能很容易与XP不同)。但在承载数百个线程的大型服务器进程中,您可以使用任何布局。MSDN文章仅适用于:Microsoft®Windows®CE.NET、Microsoft Windows CE 3.0、Pocket PC 2002.5。我根据自己使用服务器和客户端版本Windows的经验撰写了自己的评论。我知道这些系统是如何工作的。它在MSDN的什么地方这么说?它在MSDN的什么地方这么说?