【问题标题】:How to calculate memory consumption in C [duplicate]如何计算C中的内存消耗[重复]
【发布时间】:2014-02-16 05:27:37
【问题描述】:

有什么方法可以计算 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");

【问题讨论】:

  • 你在什么平台上开发?
  • 确保指定目标平台。在 C 中没有执行此任务的“标准”方法 - 解决方案将根据操作系统和准确的 what 测量而有所不同。此外,考虑分析(例如使用外部开发工具),除非应用程序确实需要为实际/内部目的执行此操作。
  • 你看过this question吗?我认为这可能是重复的。有些答案相当详尽,涵盖了多个平台。如果有,有什么不满意的地方?
  • 通过受欢迎的请求作为评论。不消耗内存。它被借用/使用。您可以为手头的任务使用一点计算机内存并能够将其归还。这就像使用道路一样。你不消费它。但记忆是个有趣的东西
  • @Mike - 感谢您提供的链接。该链接上有很多信息,我一定会通过它。我在 Windows 上开发了一个 C 程序,其中一项任务是打印该程序使用的内存。

标签: c memory profiling


【解决方案1】:

C 语言本身不提供任何手段。

虽然每个特定平台都会为您提供一些支持。

例如,在 Windows 上,您可以查看任务管理器的详细信息选项卡。右键单击列表视图列标题以添加/删除列。其中一些提供了有关进程消耗多少内存的见解。还有很多其他工具,包括商业工具(使用 google),可以提供更详细的图片。

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

【讨论】:

    【解决方案2】:

    真正的问题似乎是,您能否让 C 堆报告它当前拥有的空间量。我不知道这样做的便携方式。

    或者您可以插入一个“调试堆”实现来跟踪这个数字并提供一个 API 来检索它;调试堆可作为第二源库使用,您的编译器可能附带一个。 (许多年前,我将调试堆实现为一组宏,它们拦截堆调用并通过包装例程重定向它们以执行多种分析;我没有维护使用计数器,但我可以这样做。)((注意:从调试堆分配的任何东西都必须返回到该堆,而不是普通堆,反之亦然,否则事情很快就会变得非常丑陋。))

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

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多