在WIN7下,用C++编写一个程序,如何获取该程序运行内存空间大小

例如Linux下用getrusage这个函数。情况就是我编写了一个程序,需要计算该程序运行空间大小,以满足系统的内存消耗要求,能不能给出一种方法,并代码举例说明... 例如Linux下用 getrusage这个函数。情况就是我编写了一个程序,需要计算该程序运行空间大小,以满足系统的内存消耗要求,能不能给出一种方法,并代码举例说明 展开
 我来答
吉祥二进制
高粉答主

推荐于2020-01-31 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84578

向TA提问 私信TA
展开全部
#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):

freewzj
2011-09-21 · TA获得超过392个赞
知道小有建树答主
回答量:364
采纳率:100%
帮助的人:337万
展开全部
能编这个程序也会编操作系统了。
这个只能用系统函数了,getrusage就是一个系统函数。
更多追问追答
追问
那getrusage在windows下怎么用,包含什么头文件,能不能简单写下示例代码呢
追答
windows的不太清楚,给你网址,自己看吧
http://www.cppblog.com/klsmlzm/archive/2010/08/05/5522.html
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户33990
2011-09-22 · TA获得超过229个赞
知道小有建树答主
回答量:705
采纳率:0%
帮助的人:462万
展开全部
根据 你的 描述 ,既然其他程序可以正常运行
极有可能是 你的 程序 有错误
没有编译错误 不等于 程序 没错
没 编译错误 说明 只是没有语法错误

建议 好好 看看 你的程序 特别是scanf 语句处,还有你的两个变量的定义处
追问
?????我没说程序错误啊…………
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式