如何正确统计C程序运行的内存占用量?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确统计C程序运行的内存占用量?相关的知识,希望对你有一定的参考价值。
任务管理器里有内存和虚拟内存,我发现程序的虚拟内存占用量太大了,不太合理。另外我发现在不同的机器上跑相同的程序,任务管理器显示的内存和虚拟内存都不太一样,所以我想请问下:如何正确统计C程序运行的内存占用量?谢谢!
看不太明白,能不能给出个例子呢?谢谢
在内存碎片化严重的情况下,申请连续很大的一大块内存,可能产生失败。
当数据量接近内存大小时,一般要求更改算法,将大数据切割成一块块的小数据,逐块加载至内存运算,最后合并计算结果。
64位操作系统可处理的内存比32位大得多,所以天量数据一般使用64位以上的系统来处理,比32位系统有效率。
对于2G的32位XP,如果只运行你的程序,保留500M左右给操作系统,你的程序申请1.4G左右的连续内存是可能成功的,但不一定。 参考技术A #define _WIN32_WINNT 0x0500
#include <windows.h>
#define DIV 1024
char *divisor = "K";
#define WIDTH 7
void main(int argc, char *argv[])
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);
printf ("%ld percent of memory is in use.\n", statex.dwMemoryLoad);
printf ("There are %*I64d total %sbytes of physical memory.\n", WIDTH, statex.ullTotalPhys/DIV, divisor);
printf ("There are %*I64d free %sbytes of physical memory.\n", WIDTH, statex.ullAvailPhys/DIV, divisor);
printf ("There are %*I64d total %sbytes of paging file.\n", WIDTH, statex.ullTotalPageFile/DIV, divisor);
printf ("There are %*I64d free %sbytes of paging file.\n", WIDTH, statex.ullAvailPageFile/DIV, divisor);
printf ("There are %*I64x total %sbytes of virtual memory.\n", WIDTH, statex.ullTotalVirtual/DIV, divisor);
printf ("There are %*I64x free %sbytes of virtual memory.\n", WIDTH, statex.ullAvailVirtual/DIV, divisor);
printf ("There are %*I64x free %sbytes of extended memory.\n", WIDTH, statex.ullAvailExtendedVirtual/DIV, divisor);
本回答被提问者采纳
以上是关于如何正确统计C程序运行的内存占用量?的主要内容,如果未能解决你的问题,请参考以下文章