【Windows核心编程笔记】第十五章 在应用程序中使用虚拟内存

    xiaoxiao2025-03-27  13

    预订地址空间区域

    VirtualAlloc    预订进程中的地址空间区域,第二个参数类型是MEM_RESERVE

    VirtualAllocExNuma      同上,区别在于应用程序在NUMA机器上运行

     

    给区域调拨物理存储器

    VirtualAlloc    调拨物理存储器,第二个参数是MEM_COMMIT

     

    同时预订和调拨物理存储器

    只调用VirtualAlloc一次,而不是上边的两次

    PVOID pvMem = VirtualAlloc(NULL,99*1024,

    MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE);

     

    何时调拨物理存储器

    使用虚拟内存,既能享受数组带来的快速访问,又能更好的节省存储器(像链表那样)

    使用结构化异常处理方案决定何时调拨物理存储器(最佳方式)

     

    撤销调拨物理存储器及释放区域

    VirtualFree 撤销物理存储器或释放地址空间区域

    需要注意何时撤销

     

    改变保护属性

    VirtualProtect        改变一个内存页面的保护属性

     

    重置物理存储器的内容

    VirtualAlloc    第三个参数传MEM_RESET

     

    地址窗口扩展(AVE)

    主要用于32位程序,64位程序的进程地址空间非常大,一般不用AVE

    AVE使用流程如下:

    Virtualalloc(NULL,1024*1024,MEM_RESERV|MEM_PHYSICAL,PAGE_READWRITE);//预订

    AllocateUserPhysicalPages //分配物理存储器

    MapUserPhysicalPages        //把内存块指定给地址窗口

    FreeUserPhysicalPages        //释放内存块

    VirtualFree            //清理

    最新回复(0)