【发布时间】:2011-02-01 21:42:32
【问题描述】:
我在运行 iOS 4.2.1 的 iPhone 3G 上尝试分配大量内存时发现了一件很奇怪的事情。
当我在循环中调用 malloc(512 * 1024) 时,它会返回一个有效指针大约 1500 次,然后我得到一个 NULL 和
app(2032,0x3e7518b8) malloc: *** mmap(size=524288) failed (error code=12)
*** error: can't allocate region
这让我很惊讶,因为我认为我的 iPhone 没有 750 MB 的 RAM。然后我在malloc 之后添加了memset,它使分配数量减少到120,这更有意义。
这是我使用的超级简单的代码:
for (int i = 1; ; ++i)
{
void *p = malloc(512 * 1024);
NSLog(@"%d %p", i, p);
memset(p, 0, 512 * 1024);
}
虽然 iPhone 没有任何虚拟内存系统可以解释与此类似的行为。对此有何合理解释?
【问题讨论】: