分类: C/C++
2009-12-19 10:36:01
由于某种原因,要实现在主机端空CPU与内存利用的工具,CPU还比较容易控制,但内存控制比较不容易。
在WINDOWs/Linux平台上,用户进程虽然有4G逻辑地址空间,但实际上用户可控制的只有2G(Linux应为3G)的地址空间
因此在主机端内存大于2G以后,单进程无法控制内存利用率,需要将当前进程复制一份,或者多份(在Linux下fork() 可实现该功能,但Windows实现起来比较不容易)
首先定义读取内存信息,包括物理内存总量 与可用内存总量
runmemory.h 头文件定义
#ifndef _RUN_MEMORY_H
#define _RUN_MEMORY_H
struct MemoryInfo
{
unsigned long totalPhyMemory;
unsigned long availablePhyMemory;
};
class MemoryInfoManager
{
public:
MemoryInfoManager();
public:
~MemoryInfoManager();
public:
MemoryInfo *GetMemoryInfo();
};
#endif
runmemory.cpp 文件定义
#include "windows.h"
#include "runmemory.h"
MemoryInfoManager::MemoryInfoManager()
{
}
MemoryInfoManager::~MemoryInfoManager()
{
}
MemoryInfo* MemoryInfoManager::GetMemoryInfo()
{
MEMORYSTATUS memoryStatus;
memoryStatus.dwLength=sizeof(MEMORYSTATUS);
GlobalMemoryStatus(&memoryStatus);
MemoryInfo *info=new MemoryInfo;
info->totalPhyMemory=memoryStatus.dwTotalPhys;
info->availablePhyMemory=memoryStatus.dwAvailPhys;
return info;
}