Windows 内存模型

Windows 内存已虚拟化。 应用程序没有对内存地址的直接访问权,因此允许 Windows 移动物理内存并在 swapper 文件 (称为 pagefile.sys) 中交换内存。

分配内存通常是一个两阶段过程。 仅分配内存会使应用程序获取一个句柄。 这样不会保留任何物理内存。 句柄数量多于物理内存。 内存必须“已落实”才能使用。 在此阶段,句柄引用物理内存。 这可能并不适合请求的所有内存。

例如,对于分配给线程的堆栈,通常会指定较少的实际内存量。 如果堆栈溢出,那么将抛出异常,操作系统会分配更多的物理内存以使堆栈增大。

Windows 程序员的内存操作隐藏在为所选编程环境提供的库中。 在 C 环境中,基本内存操作例程是大家熟悉的 malloc 和 free 函数。 Windows API 位于这些库之上,通常提供更高级别的抽象。

对于程序员, Windows 提供了一个平面内存模型,在该模型中,地址从 0 运行到应用程序允许的限制。 应用程序可以选择对其内存进行分段。 在转储中,程序员会看到多组离散的内存地址。