【发布时间】:2011-09-21 21:37:54
【问题描述】:
我正在调整我的 iPhone/iPad 应用程序的性能,似乎并非所有内存都被释放,这应该是。在仪器中,我在模拟器中模拟出内存警告后,还剩下很多“Malloc”条目;他们怎么了?我可以摆脱它们吗?它们是什么意思/它们代表什么?
非常感谢,
斯蒂芬
【问题讨论】:
标签: iphone ios memory-management instruments
我正在调整我的 iPhone/iPad 应用程序的性能,似乎并非所有内存都被释放,这应该是。在仪器中,我在模拟器中模拟出内存警告后,还剩下很多“Malloc”条目;他们怎么了?我可以摆脱它们吗?它们是什么意思/它们代表什么?
非常感谢,
斯蒂芬
【问题讨论】:
标签: iphone ios memory-management instruments
在任何时候,您的应用都会有(大量)活的对象,即使在收到内存警告(以及操作系统随后的内存恢复)之后也是如此。因此,您还会看到许多您正在看到的 malloc,这是很常见的。
它们本身并不表明内存分配有问题,而可能只是表明您的程序正在运行。
也看看这个S.O. topic to learn more about the object allocation tool。
此外,您可以使用许多高级技术来检测内存分配问题。 Here 你可以找到一个很棒的教程,它可以让你超越 Leaks 工具所允许的范围。
编辑:
关于这些 malloc 的确切含义,您必须认为您可以分配两大类对象(粗略地说):通过 Obj-C 运行时系统创建的 Objective-C 对象和“普通”对象通过 malloc 分配的 C 对象。
第二类的许多对象是由系统库和编译器 C 库(例如,套接字或文件句柄等)分配的(无需您直接调用 malloc)。这些 (C) 对象没有与之关联的类型信息,因此 Instruments 只是向您显示已分配内存块的大小,而没有更多可用信息。
很多时候 malloc 对象是由更高级别的类创建的,因此当您恢复与其实例关联的内存时,通过 malloc 分配的内存也会被释放。
您不应该特别担心它们,除非您看到它们的整体大小随着程序执行“无限增长”。在这种情况下,您首先需要调查分配/释放更高级别对象的方式,并了解代码中的哪些地方卡住了。
【讨论】: