iOS:使用“malloc”自动发布的内存分配?

时间:2015-03-06 04:12:37

标签: ios iphone memory malloc ios-simulator

我想在内存压力下重现我的应用程序的崩溃错误,所以我想在我的应用程序启动时分配大量内存,并期望它在内存压力下。我使用下面的代码:

void *p[300];
NSInteger allocatedMB = 0;

for (int i = 0; i < 300; i++) {
    p[allocatedMB] = malloc(1024 * 1024);
    memset(p[allocatedMB], 0, 1024 * 1024);
    allocatedMB += 1;
}

我希望能够分配300M内存,而且永远不会释放它。但我总是在我的iPhone上得到这个结果:

enter image description here

它仅分配150M,之后将其释放到仅71M。但它在模拟器中看起来像我期望的那样:

enter image description here

我对此不太清楚,任何答案都会被理解为什么以及如何在我的iPhone上执行此操作!

2 个答案:

答案 0 :(得分:1)

malloc分配的内存未自动释放。如果你不打电话给free,它就会泄漏。在仪器的“分配”工具中观察这两种情况,您将看到堆积峰值增加300 mb而不会降低(在设备和模拟器中)。

allocations

Xcode调试器中的内存视图显然没有显示所有内容。事实上,我无法让它在模拟器或设备中向我展示300mb。但仪器向我展示了它。 (虽然,当我在设备上运行仪器分配工具时,但泄漏工具不起作用。其他人也报告了这个问题。)

答案 1 :(得分:0)

很可能代码正在优化,因为编译器可以证明永远不会访问p,因此它实际上不需要调用memset

尝试制作指针volatilevoid volatile *p[300];