美文网首页
Windows 虚拟内存

Windows 虚拟内存

作者: szn好色仙人 | 来源:发表于2018-08-29 20:53 被阅读0次

    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的内存。

    相关文章

      网友评论

          本文标题:Windows 虚拟内存

          本文链接:https://www.haomeiwen.com/subject/hwzkwftx.html