(C语言内存十)Windows下C语言程序的内存布局(内存模型)
引言
在32位环境下,Windows 默认会将高地址的 2GB 空间分配给内核(也可以配置为1GB),而将剩下的 2GB 空间分配给用户程序。
内存分布
不像 Linux,Windows 是闭源的,有版权保护,资料较少,不好深入研究每一个细节,至今仍有一些内部原理不被大家知晓。关于 Windows 地址空间的内存分布,官网上只给出了简单的说明:
对于32位程序,内核占用较高的 2GB,剩下的 2GB 分配给用户程序;
对于64位程序,内核占用最高的 248TB,用户程序占用最低的 8TB。
下图是一个典型的 Windows 32位程序的内存分布:
在分配完上面这些地址以后,Windows 的地址空间已经是支离破碎了。当程序向系统申请堆空间时,只好从这些剩下的还有没被占用的地址上分配。
地址空间分布
Windows 64位程序的地址空间分布情况如下图所示:
由于官方资料不足,我们不再深入讲解 Windows 64 位程序的具体内存分布。
结束语
当然还是找到了相关资料,不过暂时还是先搞清楚linux平台的
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/kernel/managing-memory-for-drivers