Chinaunix首页 | 论坛 | 博客
  • 博客访问: 310839
  • 博文数量: 163
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -40
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-08 00:28
文章分类

全部博文(163)

文章存档

2015年(2)

2014年(35)

2013年(28)

2012年(30)

2011年(22)

2010年(14)

2009年(8)

2008年(13)

2007年(11)

分类: 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;  

主文件定义

#include "windows.h"  
#include   
#include "runmemory.h"  
 
using namespace std;  

int main(int argc,char* argv[])  
{  
      
    cout<    STARTUPINFO si; //一些必备参数设置  
    memset(&si, 0, sizeof(STARTUPINFO));   
    si.cb = sizeof(STARTUPINFO);   
    si.dwFlags = STARTF_USESHOWWINDOW;   
    si.wShowWindow = SW_SHOW;   
    PROCESS_INFORMATION pi; //必备参数设置结束  
 
    char *cmdLine=new char[sizeof(argv[0])+10];  
 
    cmdLine=strcat(argv[0]," 100");  
    if(argc<2)  
    {  
        if(!CreateProcess(NULL,cmdLine,NULL,NULL,FALSE,NULL  
,NULL,NULL,&si,&pi))  
            //"d:\\test\\te.exe"是您要运行的程序//的路径  
        {  
            cout<<"Create Fail!"<            exit(1);  
        }  
        else 
        {  
            cout<<"Success!"<        }  
    }  
    MemoryInfoManager manager;  
 
    while(TRUE)  
    {  
        Sleep(2000);  
        MemoryInfo *info=manager.GetMemoryInfo();  
        cout<<"Total Physical Memory:"<totalPhyMemory<<" Available Physical Memory:"<availablePhyMemory<        delete info;  
        cout<<"resume"<    }  
    return 0;  
 

原文地址:http://blog.csdn.net/zczh3/archive/2009/11/13/4809368.aspx
阅读(2779) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~