当前位置:首页 > 内存 > 正文

从程序中取内存(任何程序都要加载到内存中)

  • 内存
  • 2024-08-17 02:39:48
  • 8609

一、在WIN7下,用C++编写一个程序,如何获取该程序运行内存空间大小#include
使用std命名空间;
#include
MEMORYSTATUSmem;
voidCoutMemStatus()
{
intmb=1024*1024;
GlobalMemoryStatus(&mem);
cout<<<}
intmain(intargc,char*argv[])
{
CoutMemStatus();
cout<<"##########保留1GB##################"<LPVOIDlpbase=VirtualAlloc(NULL,1024*1024*1024,MEM_RESERVE,PAGE_READWRITE);
if(lpbase==NULL)
{
cout<<"无法分配虚拟内存!"<}
CoutMemStatus();
/*1:仅用户虚拟空间减少1GB
2:int*p=(int*)lpbase;p[0]=1;这是一个错误*/
cost<<"############分配1GB######################"<VirtualAlloc(lpbase,1024*1024*1024,MEM_COMMIT,PAGE_READWRITE);
CoutMemStatus();
/*
1:总虚拟内存还有减少了1GB
2:物理内存有微小变化
*/
cost<<"############强制系统分配物理内存内存##########"<int*p=(int*)lpbase;
for(inti=0;i<1024*1024*256;i++)
{
p[i]=1;
}
CoutMemStatus();
/*1:物理内存减少约1GB
2:仅在使用时才会分配内存*/
cost<<"###############清除512MB内存#################"<VirtualAlloc(lpbase,1024*1024*512,MEM_RESET,PAGE_READWRITE);
char*pp=(char*)lpbase;
pp[1024*1024*1000]='a';
pp[0]='a';
CoutMemStatus();
//清除后的虚拟内存仍然可以使用
cout<<"###########释放512MB虚拟内存###############"<VirtualFree(lpbase,1024*1024*512,MEM_DECOMMIT);
CoutMemStatus();
//释放所有虚拟内存
cost<<"#########释放所有虚拟内存############"<VirtualFree(lpbase,0,MEM_RELEASE);
CoutMemStatus();
return0;
}

执行效果如下图(容量单位是MB: