我听说有传言说调用malloc导致所谓的“脏内存”,你可以在VM Tracker工具中看到。
现在,谣言还说必须尽量保持脏记忆量尽可能低。但他们没有多说什么是如何让它再次破坏。
有时除了使用malloc()之外别无选择。哎呀,我喜欢malloc()。例如,在为OpenAL创建音频源时,必须使用malloc()大量数据。
所以:当我的应用程序调用malloc()和free()时,我总是相信这很好。这样做我有一个很大的问题吗?或者free()总是“清理”?我有点困惑,因为一个非常大的公司的一些非常大的人警告说必须尽可能避免malloc(),因为这个脏记忆问题。
也许有人可以让我对此感到困惑。
答案 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)
你是对的 - 免费()只会再次清理它。