C语言内存监控

来源:互联网 发布:最离奇的杀人案件知乎 编辑:程序博客网 时间:2024/05/21 06:12

用C语言监控一个进程(比如QQ)的内存占用情况,整合了网上的一些代码。

头文件"process_stat.h"

#ifndef PROCESS_STAT_H  
#define PROCESS_STAT_H  


#ifdef __cplusplus  
extern "C" {  
#endif  

 typedef long long           int64_t;  
 typedef unsigned long long  uint64_t;  


#ifdef  __cplusplus  
}  
#endif  

#endif/*PROCESS_STAT_H*/ 

 


 

主函数

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>  
#include <psapi.h>  
#include <assert.h>  
#include "process_stat.h"
#include   "tlhelp32.h "

UINT GetProcessIdByName(LPCTSTR pszExeFile)
{
 UINT nProcessID = 0;
 PROCESSENTRY32 pe = {sizeof(PROCESSENTRY32)};

 

 HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
 if (hSnapshot != INVALID_HANDLE_VALUE)
 {
  if (Process32First(hSnapshot, &pe))
  {
   while (Process32Next(hSnapshot, &pe))
   {
    if (lstrcmpi(pszExeFile, pe.szExeFile) == 0)
    {
     nProcessID = pe.th32ProcessID;
     break;
    }
   }
  }

  CloseHandle(hSnapshot);
 }

 return nProcessID;
}

 

int get_memory_usage(uint64_t* mem, uint64_t* vmem)  
{  
    PROCESS_MEMORY_COUNTERS pmc; 

   UINT ID = GetProcessIdByName(_T("QQ.exe"));
    if(GetProcessMemoryInfo(/*GetCurrentProcess()*/OpenProcess(PROCESS_ALL_ACCESS, FALSE, ID), &pmc, sizeof(pmc)))  
    {  
        if(mem) *mem = pmc.WorkingSetSize;  
        if(vmem) *vmem = pmc.PagefileUsage;  
        return 0;  
    }  
    return -1;  
}

int _tmain(int argc, _TCHAR* argv[])
{
 uint64_t mem, vmem, r, w; 
 get_memory_usage(&mem, &vmem);    
 
 printf("内存使用: %u 字节\n", mem);  
 printf("虚拟内存使用: %u 字节\n", vmem);    
 
 return 0;
}

 

原创粉丝点击