📜  Windows 内存管理(1)

📅  最后修改于: 2023-12-03 15:21:10.779000             🧑  作者: Mango

Windows 内存管理介绍

概述

在Windows系统中,内存管理是一个重要的主题。Windows操作系统使用了各种策略来有效地管理内存资源,以保证系统的稳定性和性能。其中,内存管理的主要任务包括以下几点:

  • 维护虚拟内存。
  • 管理进程的虚拟地址空间。
  • 确定物理内存的分配方式。
  • 管理内存中的对象。
  • 分配和释放内存。
虚拟内存

在Windows系统中,虚拟内存由以下几个部分组成:

  • 虚拟地址空间:每个进程都有自己的虚拟地址空间,它由32位或64位的虚拟地址组成。
  • 空闲虚拟内存:为程序、系统和应用留出一些虚拟地址空间,以应对未来可能需要使用的内存需求。
  • 交换文件:用于存储未被活跃进程的内存页,释放出空间供其他进程使用。
进程的虚拟地址空间

Windows系统中,每个进程都有其独立的虚拟地址空间。每个虚拟地址映射到物理内存或者通过调页机制映射到交换文件中。

Windows使用了一种称为“段”或“区域”的内存单元来管理进程的虚拟地址空间。在一个进程中,可以包含多个段。Windows中,段被称为虚拟地址区域(VMA),每个VMA包含三个属性:

  • 起始虚拟地址
  • 大小
  • 物理内存保护属性
物理内存分配

Windows使用多种物理内存管理机制来实现内存的分配和释放:

固定分配方式

Windows将系统中的物理内存划分为四种池,分别是:

  • 非分页池(Nonpaged Pool):用于处理系统的数据结构、页文件、系统引导等等。
  • 分页池(Paged Pool):用于处理页面式内存。
  • 系统缓存(System Cache):用于文件缓存、域控制器等等。
  • 驱动程序映像(Driver Image):用于驱动程序。
可变分配方式

可变分配方式允许Windows动态重新分配物理内存,以实现最大程度的内存使用,该机制是通过Windows内存管理操作系统服务来实现的。

对象管理

对象管理是内存管理的一个重要方面,它允许Windows操作系统按照指定的方式分配和释放系统内存。Windows中常常使用对象管理机制来管理以下资源:

  • 进程和线程
  • 文件和进程句柄
  • 安全打印对象等等
内存分配和释放

Windows提供了多种机制来分配和释放内存,如:

  • 内存池
  • 共享内存

在使用任意一种机制时,对于任意一个软件程序,内存分配和释放是至关重要的。正确、合理地管理内存,可以提升软件程序的性能和稳定性。

// 内存分配和释放的示例代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char *str = (char*)calloc(20, sizeof(char)); // 分配内存空间
    strcpy(str, "Hello world"); // 向内存空间中写入字符串
    printf("%s\n", str); // 输出字符串
    free(str); // 释放内存空间
    return 0;
}
参考文献