1

直到现在在堆栈地址非常高而堆地址非常低的 Linux 上工作(如使用 C 程序打印堆和堆栈地址所见),我在 Win32 进程内存布局方面存在问题。MWSDN 是说堆栈地址高于堆地址,但从我在实践中看到的情况来看,堆栈地址低于堆地址。所以我很困惑。有人请解释一下。

4

1 回答 1

5

嗯,stack addresses are higher than heap addresses- 这根本不是真的。堆栈和堆都可以驻留在 Windows 进程地址空间中的任何位置。

如果你启动很多线程,进行巨大的堆分配并加载数百个 dll,你会发现所有这些对象都均匀地分布在地址空间中。

在此处输入图像描述

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

于 2012-08-12T19:55:51.297 回答