(转)C语言_测试程序运行内存状态GlobalMemoryStatus使用案例
在做毕业设计的时候,需要验证算法的空间复杂度,C语言网上都说是用GlobalMemoryStatus这个函数,但是网上却没有这个函数的使用实例,也有人说是用内存分析器的东西,但是这个显然是不靠谱的。
这里详细介绍一下我使用GlobalMemoryStatus函数的过程:(后面附上实例)
GlobalMemoryStatus,Win32 API函数。
此函数用来获得当前可用的物理和虚拟内存信息,函数定义为:
VOID GlobalMemoryStatus
(
LPMEMORYSTATUS lpBuffer
);
此函数无返回值,参数是一个指向名为MEMORYSTATUS的结构的指针。函数的返回信息会被存储在MEMORYSTATUS结构中。
关于MEMORYSTATUS结构:
结构定义:
typedef struct _MEMORYSTATUS { // mst
DWORD dwLength; // sizeof(MEMORYSTATUS)
DWORD dwMemoryLoad; // percent of memory in use
DWORD dwTotalPhys; // bytes of physical memory
DWORD dwAvailPhys; // free physical memory bytes
DWORD dwTotalPageFile; // bytes of paging file
DWORD dwAvailPageFile; // free bytes of paging file
DWORD dwTotalVirtual; // user bytes of address space
DWORD dwAvailVirtual; // free user bytes
} MEMORYSTATUS, *LPMEMORYSTATUS;
以上是win api 中的定义,下面给出一点实例:
MEMORYSTATUS ms; //记录内容空间信息的结构体变量
GlobalMemoryStatus(&ms);//调用GlobalMemoryStatus()函数获取内存信息
cout<<"total physical mem:"<<(float)ms.dwTotalPhys/1024/1024<<"MB"<<endl; //总的物理内存大小
cout<<"used physical mem:"<<(float)(ms.dwTotalPhys - ms.dwAvailPhys)/1024/1024<<"MB"<<endl; //已用物理内存大小
cout<<"avilible physical mem:"<<(float)ms.dwAvailPhys/1024/1024<<"MB"<<endl; //可用物理内存大小
cout<<endl;
cout<<"total Virtual mem:"<<(float)ms.dwTotalVirtual/1024/1024<<"MB"<<endl; //总的虚拟内存大小
cout<<"used Virtual mem:"<<(float)(ms.dwTotalVirtual-ms.dwAvailVirtual)/1024/1024<<"MB"<<endl; //已用虚拟内存大小
cout<<"avilible Virtual mem:"<<(float)ms.dwAvailVirtual/1024/1024<<"MB"<<endl; //可用虚拟内存大小
运行结果如下:
总物理内存:2048MB
可用物理内存:828.055MB
总虚拟内存:2047.88MB
可用虚拟内存:2021.42MB
但是,我在运行下通过systeminfo指令获取的内存信息为:
物理内存总量:3062MB
可用物理内存:833MB
虚拟内存:最大值:6121MB
虚拟内存:可用:1469MB
虚拟内存:使用中:4652MB
需要说明的是:在我的程序中,我感觉此方法测量起来不是很准确
(转)C语言_测试程序运行内存状态GlobalMemoryStatus使用案例的更多相关文章
- 怎样让Oracle支持中文? 语言_地域.字符集
暂时不涉及数据库业务,但是今天入库的时候中文入库报错,考虑可能是字体不支持,留待备用. 来源:Linux社区 作者:robertkun 语言_地域.字符集SIMPLIFIED CHINESE_CHI ...
- c语言_常见图片格式判断
c语言_常见图片格式判断 我想尽各种思路.今天,终于把图片判断搞定了. 在此,我写一下我的思路.希望对那些不想看代码的朋友们有帮助. 常风的的图片格式有:bmp,png,jpg,gif等图片格式. 我 ...
- BZOJ_1212_[HNOI2004]L语言_哈希
BZOJ_1212_[HNOI2004]L语言_哈希 Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写 ...
- 选择排序_C语言_数组
选择排序_C语言_数组 #include <stdio.h> void select_sort(int *); int main(int argc, const char * argv[] ...
- 插入排序_C语言_数组
插入排序_C语言_数组 #include <stdio.h> void insertSort(int *); int main(int argc, const char * argv[]) ...
- 快速排序_C语言_数组
快速排序_C语言_数组 #include <stdio.h> void quickSort(int *, int, int); int searchPos(int *, int, int) ...
- 冒泡排序_C语言_数组
冒泡排序_C语言_数组 #include <stdio.h> //冒泡排序 小->大 void sort(int * pArray, int len); int main(int a ...
- Flutter实战视频-移动电商-16.补充_保持页面状态
16.补充_保持页面状态 修正一个地方: 设置了item的高度为380 横向列表为380.最终build的高度也增加了50为430. 增加了上面的高度以后,下面那个横线划掉的价格可以显示出来了. 但是 ...
- 3.1 C语言_实现AVL平衡二叉树
[序] 上节我们实现了数据结构中最简单的Vector,那么来到第三章,我们需要实现一个Set set的特点是 内部有序且有唯一元素值:同时各种操作的期望操作时间复杂度在O(n·logn): 那么标准的 ...
随机推荐
- EF Core CodeFirst实践 ( 使用MS SqlServer)
这里使用 MS SQLSERVER ,网上大多使用 SQLite 先来一个CodeFirst 新建项目 这里我们选择 ASP.NET Core Web Application (.NET Core) ...
- h5调用摄像头
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- 【jq】c#零基础学习之路(4)抽象类和密封
一.抽象类 1.抽象类不能被实例化 2.抽象类方法必需要实现 3.如何类中函数为抽象函数,其类也需要定义成抽象类 4.关键字 abstract ,函数重写 override. 二.密封类 1.密封类不 ...
- 利用C语言获得网页编码
#include <stdio.h> #include <winsock.h> #include <string.h> #pragma comment(lib, & ...
- maven项目 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
tomcat在发布项目的时候没有同时发布maven依赖所添加的jar包,所以找不到解决方法:设置一下eclipse:项目 -> properties -> Deployment Assem ...
- Arcgis Server 10.2默认服务端口号修改方法
本人安装Arcgis Server 10.2之后发布了一个地图服务,该服务默认使用的端口号是6080,本人使用的是教育网,使用教育网均能正常使用该服务,但是使用电信或者移动网络均不能正常访问该网站. ...
- spring retry 使用
1. 场景 系统方法调用时无状态的,同时因为网络原因,或者系统暂时故障,进行的重试 2. maven 依赖 <project xmlns="http://maven.apa ...
- C++ 取得系统当前时间
#include <time.h> //* 方法一 time_t tt = time(NULL);//这句返回的只是一个时间cuo tm* t= localtime(&tt); p ...
- tomcat war部署根目录下
一个很取巧的办法,步骤如下: 1. 删除webapp下所有文件 cd ${TOMAT_HOME}/webapps && rm -rf * 2. copy待部署war到webapps目录 ...
- [开源项目]Hibernate基本使用
开源项目(1)Hibernate基本使用 Hibernate介绍 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象 ...