如果考虑malloc()导致“脏内存”,是免费()清理吗?

时间:2011-12-03 00:59:53

标签: iphone performance

我听说有传言说调用malloc导致所谓的“脏内存”,你可以在VM Tracker工具中看到。

现在,谣言还说必须尽量保持脏记忆量尽可能低。但他们没有多说什么是如何让它再次破坏。

有时除了使用malloc()之外别无选择。哎呀,我喜欢malloc()。例如,在为OpenAL创建音频源时,必须使用malloc()大量数据。

所以:当我的应用程序调用malloc()和free()时,我总是相信这很好。这样做我有一个很大的问题吗?或者free()总是“清理”?我有点困惑,因为一个非常大的公司的一些非常大的人警告说必须尽可能避免malloc(),因为这个脏记忆问题。

也许有人可以让我对此感到困惑。

4 个答案:

答案 0 :(得分:3)

我严重怀疑这是真的。 Cocoa中的所有内存分配最终都是通过malloc完成的。所以说Apple的Memory Usage Performance Guidelines。引用该文件:

  

因为内存是如此基本的资源,Mac OS X和iOS都是如此   提供几种分配方式。你有哪些配置技巧   使用将主要取决于您的需求,但最终所有内存   分配最终使用malloc库来创建内存。   甚至Cocoa对象最终都是使用malloc库分配的。

我不知道你们这家大公司的大家伙,但我认识那些不知道蹲下的大公司的大家伙。只是在说'。文档每次都胜过谣言。 :)

答案 1 :(得分:2)

我不知道“脏”和“干净”是什么意思。可能他们指的是分裂的问题。执行大量的alloc和frees可能会导致碎片问题,但这实际上取决于您分配的使用模式和块大小。一般来说,不要担心使用malloc和free。如果您真的有理由避免使用标准分配器,则可以使用自己的分配器。然后你只需要为一个巨大的块调用malloc,你可以将它作为自定义分配器的基础。

答案 2 :(得分:1)

如果malloc并多次释放相同大小的内存块,则将重用内存而不是累积脏VM页面。因此,只要您知道应用程序在任何时候分配的所有可能片段大小的最大值,并且使您的应用程序保持在操作系统杀死限制之下,它就是完全安全的。

答案 3 :(得分:0)

你是对的 - 免费()只会再次清理它。