【问题标题】:Malloc does not return memory, why?malloc 不返回内存,为什么?
【发布时间】:2011-03-30 08:41:15
【问题描述】:

我正在使用malloc 分配内存并在使用后释放它,但在每第三次操作中我注意到malloc 没有分配内存。

谁能告诉我发生了什么...为什么malloc 不起作用...我应该怎么做才能分配内存?

发布代码很困难,因为它涉及大量文件.. 主要是我认为它的内存不足...所以也许我可以确定我浪费或使用了多少内存?

【问题讨论】:

  • 多少你分配了内存?这很重要。
  • 您的应用程序是 32 位还是 64 位? (从“visual-c++”标签,我假设你在 Windows 上运行。)
  • 你是如何测量的?你只是使用Windows任务管理器并查看使用的内存吗?嗯....内存永远不会那样工作。
  • 是的,我正在 windows vc++ 上调试代码.....从那里我知道 malloc 没有分配内存

标签: visual-c++


【解决方案1】:

为什么你认为“malloc 没有分配内存”?它是返回 NULL,还是您正在查看一些系统内存统计信息。如果是后者,可能是因为您的 C 库实现保留了先前分配的内存,而不是直接将其返回给系统。

【讨论】:

  • @SPB:这意味着 malloc 内存不足。
【解决方案2】:

正如其他人所说,malloc() 正在返回 NULL,因为您的应用程序内存不足(或者更准确地说,虚拟地址空间不足)。

如果我对您的描述理解正确,那么您两次成功运行相同的工作负载,但第三次尝试时,您的内存不足。

这里基本上可能发生两件事:

  1. 你是leaking memory。 (我看到您说您正在释放您使用的内存,但意外泄漏内存非常容易。)您可以找到有关 Visual C++ 用于泄漏检测的内置功能的信息here

    李>
  2. 你是fragmenting memory。随着应用程序开始使用可用的 32 位地址空间的很大一部分,碎片已经开始成为一个真正的问题。不幸的是,对于这个问题并没有真正的简单的解决方案,但请查看这些 SO 问题以获取更多信息:

    How to avoid heap fragmentation?

    How to solve Memory Fragmentation

    Memory management in memory intensive application

【讨论】:

  • 这是对这个非常模棱两可的问题的一个很好的答案
  • 有没有办法让 malloc 完全不返回并崩溃?
猜你喜欢
  • 2017-10-08
  • 2016-07-18
  • 2012-09-02
  • 2011-03-07
  • 1970-01-01
  • 2015-12-24
  • 2016-02-28
  • 2013-05-16
  • 2021-08-29
相关资源
最近更新 更多