在WIN7下,用C++编写一个程序,如何获取该程序运行内存空间大小
例如Linux下用getrusage这个函数。情况就是我编写了一个程序,需要计算该程序运行空间大小,以满足系统的内存消耗要求,能不能给出一种方法,并代码举例说明...
例如Linux下用 getrusage这个函数。情况就是我编写了一个程序,需要计算该程序运行空间大小,以满足系统的内存消耗要求,能不能给出一种方法,并代码举例说明
展开
展开全部
#include <iostream>
using namespace std;
#include <windows.h>
MEMORYSTATUS mem;
void CoutMemStatus()
{
int mb=1024*1024;
GlobalMemoryStatus(&mem);
cout<<mem.dwTotalPhys/mb<<" "<<mem.dwAvailPhys/mb<<endl
<<mem.dwTotalPageFile/mb<<" "<<mem.dwAvailPageFile/mb<<endl
<<mem.dwTotalVirtual/mb<<" "<<mem.dwAvailVirtual/mb<<endl;
}
int main(int argc,char *argv[])
{
CoutMemStatus();
cout<<"##########保留1GB##################"<<endl;
LPVOID lpbase=VirtualAlloc(NULL,1024*1024*1024,MEM_RESERVE,PAGE_READWRITE);
if(lpbase==NULL)
{
cout<<"can't alloc Virtual Memory!"<<endl;
}
CoutMemStatus();
/*1:只有用户虚拟空间减少了1GB
2:int *p=(int *)lpbase; p[0]=1; this is error*/
cout<<"###########分配1GB######################"<<endl;
VirtualAlloc(lpbase,1024*1024*1024,MEM_COMMIT,PAGE_READWRITE);
CoutMemStatus();
/*
1:总虚拟内存也减少了1GB
2:物理内存有微小的变化
*/
cout<<"############逼系统分配物理内存##########"<<endl;
int *p=(int *)lpbase;
for(int i=0;i<1024*1024*256;i++)
{
p[i]=1;
}
CoutMemStatus();
/*1:物理内存减少约了1GB
2:只有用才会分配内存*/
cout<<"###############清除512M内存##################"<<endl;
VirtualAlloc(lpbase,1024*1024*512,MEM_RESET,PAGE_READWRITE);
char *pp=(char *)lpbase;
pp[1024*1024*1000]='a';
pp[0]='a';
CoutMemStatus();
//清除后的虚拟内存是还可以使用的
cout<<"##########释放512M虚拟内存###############"<<endl;
VirtualFree(lpbase,1024*1024*512,MEM_DECOMMIT);
CoutMemStatus();
//释放所有虚拟内存
cout<<"#########释放所有的虚拟内存#############"<<endl;
VirtualFree(lpbase,0,MEM_RELEASE);
CoutMemStatus();
return 0;
}
执行效果如下图所示(容量单位是MB):
展开全部
能编这个程序也会编操作系统了。
这个只能用系统函数了,getrusage就是一个系统函数。
这个只能用系统函数了,getrusage就是一个系统函数。
更多追问追答
追问
那getrusage在windows下怎么用,包含什么头文件,能不能简单写下示例代码呢
追答
windows的不太清楚,给你网址,自己看吧
http://www.cppblog.com/klsmlzm/archive/2010/08/05/5522.html
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根据 你的 描述 ,既然其他程序可以正常运行
极有可能是 你的 程序 有错误
没有编译错误 不等于 程序 没错
没 编译错误 说明 只是没有语法错误
建议 好好 看看 你的程序 特别是scanf 语句处,还有你的两个变量的定义处
极有可能是 你的 程序 有错误
没有编译错误 不等于 程序 没错
没 编译错误 说明 只是没有语法错误
建议 好好 看看 你的程序 特别是scanf 语句处,还有你的两个变量的定义处
追问
?????我没说程序错误啊…………
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询