Windows 虚拟内存

GetSystemInfo
Retrieves information about the current system.
To retrieve accurate information for an application running on WOW64, call the GetNativeSystemInfo function.

  • SYSTEM_INFO
typedef struct _SYSTEM_INFO {
    union {
        DWORD dwOemId;          // Obsolete field...do not use
        struct {
            WORD wProcessorArchitecture;    //The processor architecture of the installed operating system
            /*
            PROCESSOR_ARCHITECTURE_AMD64    9       x64 (AMD or Intel)
            PROCESSOR_ARCHITECTURE_ARM      5       ARM
            PROCESSOR_ARCHITECTURE_ARM64    12      ARM64
            PROCESSOR_ARCHITECTURE_IA64     6       Intel Itanium-based
            PROCESSOR_ARCHITECTURE_INTEL    0       x86
            PROCESSOR_ARCHITECTURE_UNKNOWN  0xffff  Unknown architecture.
            */
            WORD wReserved;
        } DUMMYSTRUCTNAME;
    } DUMMYUNIONNAME;
    DWORD dwPageSize;                       //CPU页面大小,x86和x64机器下为4096, IA-64下为8192
    LPVOID lpMinimumApplicationAddress;     //给出每个进程可用地址空间的最小内存地址,一般为65536
    LPVOID lpMaximumApplicationAddress;     //给出每个进程的私有地址空间中最大的可用内存地址
    DWORD_PTR dwActiveProcessorMask;        //表示当前处于活动状态的CPU,是一个位掩码
    DWORD dwNumberOfProcessors;             //CPU数量
    DWORD dwProcessorType;                  //作废字段
    DWORD dwAllocationGranularity;          //预定地址空间区域的分配粒度,一般为65536
    WORD wProcessorLevel;                   //进一步细分的处理器体系结构
    WORD wProcessorRevision;                //进一步对wProcessorLevel进行细分
} SYSTEM_INFO, *LPSYSTEM_INFO;


IsWow64Process
Determines whether the specified process is running under WOW64.(WOW64 is the x86 emulator(仿真器) that allows 32-bit Windows-based applications to run seamlessly(无空隙地) on 64-bit Windows.)

GlobalMemoryStatusEx
Retrieves information about the system's current usage(使用) of both physical and virtual memory.

GetProcessMemoryInfo

typedef struct _PROCESS_MEMORY_COUNTERS {
    DWORD cb;                           
    //The size of the structure, in bytes.

    DWORD PageFaultCount;               
    //The number of page faults.

    SIZE_T PeakWorkingSetSize;         
    //The peak(最高点) working set size, in bytes.      (对应任务管理器中的 峰值工作设置(内存))

    SIZE_T WorkingSetSize;              
    //The current working set size, in bytes.   (对应任务管理器中的 工作设置(内存))

    SIZE_T QuotaPeakPagedPoolUsage;     
    //The peak paged pool usage, in bytes.     

    SIZE_T QuotaPagedPoolUsage;        
    //The current paged pool usage, in bytes.   (对应任务管理器中的 分页池)

    SIZE_T QuotaPeakNonPagedPoolUsage;  
    //The peak nonpaged pool usage, in bytes.

    SIZE_T QuotaNonPagedPoolUsage;     
    //The current nonpaged pool usage, in bytes.(对应任务管理器中的 非页面缓存池)

    SIZE_T PagefileUsage;              
    /*The Commit Charge value in bytes for this process.    (对应任务管理器中的 提交大小)
    Commit Charge is the total amount of memory that the memory manager 
    has committed for a running process.*/

    SIZE_T PeakPagefileUsage;           
    //The peak value in bytes of the Commit Charge during the lifetime of this process.

} PROCESS_MEMORY_COUNTERS;
typedef PROCESS_MEMORY_COUNTERS *PPROCESS_MEMORY_COUNTERS;
  • 工作设置(内存) :专用(私有)工作集(当前进程独占)中的物理内存数量与进程正在使用且可以和其他进程共享的物理内存数量的总和。因此可以这么理解,该值就是该进程所占用的总的物理内存
  • 峰值工作设置(内存) : 进程的工作设置(内存)的最大值,可以这么理解,因为工作设置(内存)是波动的,这个项专门记录最大的那个值。
  • 内存(专用工作集) : 工作集的子集,它专门描述某个进程正在使用且无法与其他进程共享的物理内存值。这个值对于一个进程来说也是最重要的,它代表了一个进程到底独占了多少物理内存。
  • 内存(共享工作集) : 进程和可以和别的进程共享的物理内存值(注意:是可以共享的,不一定共享了)。比较常见的,譬如,加载系统的一些DLL所占用的物理内存,文件共享内存(文件映射),命名共享内存等等。
  • 提交大小 : 给当前进程使用而保留的私有虚拟内存的数量,如果要查内存泄漏,可以关注这个值。new malloc VirtualAlloc 分配的内存大小。
  • 分页池 : 由内核或驱动程序代表进程分配的可分页内核内存的数量。可分页内存是可以写入其他存储媒介(例如硬盘)的内存。此页面的增长通常是由于打开的句柄没有关闭造成的
  • 非分页缓冲池 : 由内核或驱动程序代表进程分配的不可分页的内核内存的数量。不可分页的内存是不能写入其他存储媒介的内存。

VirtualQuery
Retrieves information about a range of pages in the virtual address space of the calling process.
To retrieve information about a range of pages in the address space of another process, use the VirtualQueryEx function.

AWE

使用AWE(地址窗口扩展),可以让应用程序分配一块或多块内存,当一开始分配时,在进程的地址空间中是看不见这些内存的,然后在需要的时候将一块内存指定到利用VirtualAlloc预定的地址上并对内存进行访问。利用AWE可以让32位程序使用大于2GB的内存。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • word直接复制来了,格式就不改了。至于这门课怎么复习,只要平时实验都认真完成、报告认真写,平时分都很高;考试的话...
    Jozhn阅读 4,639评论 0 8
  • 操作系统概论 操作系统的概念 操作系统是指控制和管理计算机的软硬件资源,并合理的组织调度计算机的工作和资源的分配,...
    野狗子嗷嗷嗷阅读 12,075评论 3 34
  • 操作系统对内存的管理 没有内存抽象的年代 在早些的操作系统中,并没有引入内存抽象的概念。程序直接访问和操作的都是物...
    Mr槑阅读 16,780评论 3 24
  • 天数,命数,运数。 天数:掌握趋势,规律。 命数:家族。 运数:资源整合者。 捭阖:开关。捭,开也,阳也。阖,关也...
    米兰默阅读 483评论 0 0
  • “我们都是一群很平凡的人,因此要学会自己给自己制造快乐,自己欣赏自己的美丽。”玲子说。玲子还是和以往一样慵懒的躺在...
    南遥思故阅读 773评论 3 30