(转)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): 那么标准的 ...
随机推荐
- redis入门笔记(2)
redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...
- 在shell script中进行数值运算的两种方法
方法1:使用"$((计算式))"的方式进行数值运算,不需要使用declare命令显示声明数值型变量来存储计算结果: 方法2:使用declare命令配合"-i"选 ...
- 关于从jsp 中 引用 js 中的里层function
在需要引用的方法里: 需要引用的方法 function (){ new js中的父方法().子方法(参数) }
- Kali Linux additional tools setup
The steps are pretty straight forward. The only tool that might cause some confusion is SMBexec. Thi ...
- 【OPENGL】第三篇 着色器基础(一)
在这一章,我们会学习什么是着色器(Shader),什么是着色器语言(OpenGL Shading Language-GLSL),以及着色器怎么和OpenGL程序交互. 首先我们先来看看什么叫着色器. ...
- cps变换
网上看了很多内容,很少有给出一个准确的概念,它的英文全称是continuous passing style, 直译为连续传递样式,那么cps transform就是将一些原本不是continuous ...
- PHP 数组转码
/** * 数组转码 * @param array $arr 要转码的数组 * @param string $in_charset 输入的字符集 * @param string $out_charse ...
- AutoVue打开ProE工程图中文乱码
解决办法: 在AutoVue安装目录/Bin/allusers.ini中增加 [Options]ProELang=Chinese_cn
- java 8 原版 api 下载地址,
http://download.oracle.com/otn-pub/java/javafx/8.0.25-b17/javafx-8u25-apidocs.zip?AuthParam=14174994 ...
- js,addEventListener参数传递
解决方法 因为i相对匿名函数是外面的变量,就把循环绑定的时候,将i的值传入到匿名函数内,就可以了.因此需要在匿名函数(事件函数)外包裹一个匿名函数, 并立即执行. var elems = docume ...