如何计算C中的内存消耗

时间:2014-01-25 02:35:39

标签: c memory profiling

有没有办法计算C中的内存消耗量。我已经在Stackoverflow上检查了其他答案,但它们并不令人满意。

类似于我们在Java中的那些:

// Get the Java runtime
Runtime runtime = Runtime.getRuntime();
// Run the garbage collector
runtime.gc();
// Calculate the used memory
long memory = runtime.totalMemory() - runtime.freeMemory();
System.out.println("Used memory is bytes: " + memory + "bytes");
System.out.println("Used memory is kilobytes: " + bytesTokilobytes(memory) +"kb");

2 个答案:

答案 0 :(得分:1)

C语言本身并没有提供任何手段。

虽然每个特定平台都会给你一些支持。

例如,在Windows上,您可以查看TaskManager的“详细信息”选项卡。右键单击listview列标题以添加/删除列。其中一些可以深入了解进程消耗的内存量。还有很多其他工具,包括商业用途(使用谷歌),可以提供更详细的图片。

在Windows上,还有一些特殊的API可以编写自己的工具。前一段时间我写了一篇。我不希望这个答案成为广告。

答案 1 :(得分:0)

真正的问题似乎是,你可以让C堆报告它目前拥有多少空间。我不知道这是一种可移植的方式。

或者你可以插入一个跟踪这个号码的“调试堆”实现,并提供一个API来检索它;调试堆可用作第二源库,并且可以随编译器一起使用。 (许多年前,我将一个调试堆实现为一组宏,它拦截堆调用并通过包装器例程重定向它们以执行多种分析;我没有维护使用计数器,但我本可以这样做。)((注意:从调试堆分配的任何内容必须返回到该堆,而不是正常的堆,反之亦然,或者事情变得非常难看。))

或者您的编译器可能有一些其他非标准方法来检索此信息。检查其文档。