加载中…
个人资料
jackeagle
jackeagle
  • 博客等级:
  • 博客积分:0
  • 博客访问:11,474
  • 关注人气:0
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

GetProcessMemoryInfo()

(2013-10-22 12:05:58)
标签:

getprocessmemoryinfo

it

分类: windows核心编程

我们把一个进程中的地址空间中被保存在内存里的那些页面称为它的工作集,对一个给定进程来说,下面的函数可以取得当前工作集的大小和最大工作集的大小,该函数在psapi.h中定义:

BOOL WINAPI  GetProcessMemoryInfo(

HANDLE                     hProcess,

PPROCESS_MEMORY_COUNTERS  ppmc,

DWORD                      cbSize

)

hProcess:我们感兴趣的进程的句柄

ppmc:一个指向PROCESS_MEMORY_COUNTERS结构的指针(关于该结构的认识请看下面)

cbSize:指定PROCESS_MEMORY_COUNTERS的大小

 

PROCESS_MEMORYCOUNTERS结构成员如下:

typedef struct _PROCESS_MEMORY_COUNTERS {

  DWORD               cb; //结构的大小

  DWORD               PageFaultCount; //页访问错误次数

  SIZE_T              PeakWorkingSetSize;

  SIZE_T              WorkingSetSize;

  SIZE_T              QuotaPeakPagedPoolUsage;

  SIZE_T              QuotaPagedPoolUsage;

  SIZE_T            QuotaPeakNonPagedPoolUsage;

  SIZE_T            QuotaNonPagedPoolUsage;

  SIZE_T            PagefileUsage;

  SIZE_T            PeakPagefileUsage;

} PROCESS_MEMORY_COUNTERS, *PPROCESS_MEMORY_COUNTERS;

 

参数介绍:(下面描述的都是当前进程)

PeakWorkingSetSize;工作集的最大值(即该进程运行以来曾用过的最大内存数量)

WorkingSetSize:该进程当前工作集(即当前进程正在使用的字节数)

QuotaPeakPagedPoolUsage:使用分页池的最高峰

QuotaPagedPoolUsage:当前使用的分页池的数量

QuotaPeakNonPagedPoolUsage;使用非分页池的最大值

QuotaNonPagedPoolUsage:当前使用非分页池的数量

PagefileUsage:内存管理器已经提交给windows该进程内存的使用值

PeakPagefileUsage:该进程运行以来 提交占用 的最大值

在这里含有一个结构PROCESS_MEMORY_COUNTERS_EX它多了一个字段PrivateUsage这个字段可以让我们知道我们显示分配内存的数量(即调用 new mellocVirtualAloc函数申请的内存)

 

 

 

//获得进程内存的相关信息

#include "stdafx.h"

#include "windows.h"

#include "psapi.h"

int _tmain(int argc, _TCHAR* argv[])

{

         PROCESS_MEMORY_COUNTERS ProcessMemory = {sizeof(ProcessMemory)};

         HANDLE hProcess = ::GetCurrentProcess();

         if(GetProcessMemoryInfo(hProcess,&ProcessMemory,sizeof(ProcessMemory)))

         {

                   printf("PageFaultCount:%u\n\n",ProcessMemory.PageFaultCount);

                  

                   printf("PagefileUsage:%u\n",ProcessMemory.PagefileUsage);

                   printf("PeakPagefileUsage:%u\n\n",ProcessMemory.PeakPagefileUsage);

                  

                   printf("PeakWorkingSetSize:%u\n",ProcessMemory.PeakWorkingSetSize);

                   printf("WorkingSetSize:%u\n\n",ProcessMemory.WorkingSetSize);

 

                   printf("QuotaPeakNonPagedPoolUsage:%u\n",ProcessMemory.QuotaPeakNonPagedPoolUsage);

                   printf("QuotaNonPagedPoolUsage:%u\n\n",ProcessMemory.QuotaNonPagedPoolUsage);

                  

                   printf("QuotaPeakPagedPoolUsage:%u\n",ProcessMemory.QuotaPeakPagedPoolUsage);

                   printf("QuotaPagedPoolUsage:%u\n",ProcessMemory.QuotaPagedPoolUsage);

         }

         return 0;

}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有