如何正确统计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程序运行的内存占用量?的主要内容,如果未能解决你的问题,请参考以下文章

用c语言写的程序在电脑中所占用的内存系统会不会自动清理

运行php程序文件占用多大内存

iOS 内存占用的正确统计数据是啥。实时字节?真实记忆?其他?

如何找出我的 linux 应用程序的内存占用?

如何查看内存占用和运行速度

如何修改pycharm占用的内存大小