本文背景:
在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用;根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制。
本文目的:
对Windows内存管理机制了解清楚,有效的利用C++内存函数管理和使用内存。
本文内容:
本文一共有六节,由于篇幅较多,故按节发表。其他章节请看本人博客的Windows内存管理及C++内存分配实例(一)(三)(四)(五)和(六)。
2. 内存状态查询函数
2.1系统信息
Windows 提供API可以查询系统内存的一些属性,有时候我们需要获取一些页面大小、分配粒度等属性,在分配内存时用的上。
请看以下C++程序:
SYSTEM_INFO sysInfo;
GetSystemInfo(&sysInfo);
cout<<"机器属性:"<<endl;
cout<<"页大小="<<sysInfo.dwPageSize<<endl;
cout<<"分配粒度="<<sysInfo.dwAllocationGranularity<<endl;
cout<<"用户区最小值="<<sysInfo.lpMinimumApplicationAddress<<endl;
cout<<"用户区最大值="
<<sysInfo.lpMaximumApplicationAddress<<endl<<endl;
结果如下:
可以看出,页面大小是4K,区域分配粒度是64K,进程用户区是0x0001 0000~0x7FFE FFFF。
2.2内存状态
· 内存状态可以获取总内存和可用内存,包括页文件和物理内存。
请看以下C++程序:
MEMORYSTATUS memStatus;
GlobalMemoryStatus(&memStatus);
cout<<"内存初始状态:"<<endl;
cout<<"内存繁忙程度="<<memStatus.dwMemoryLoad<<endl;
cout<<"总物理内存="<<memStatus.dwTotalPhys<<endl;
cout<<"可用物理内存="<<memStatus.dwAvailPhys<<endl;
cout<<"总页文件="<<memStatus.dwTotalPageFile<<endl;
cout<<"可用页文件="<<memStatus.dwAvailPageFile<<endl;
cout<<"总进程空间="<<memStatus.dwTotalVirtual<<endl;
cout<<"可用进程空间="<<memStatus.dwAvailVirtual<<endl<<endl;
结果如下: