gpt4 book ai didi

iphone - 奇怪的 iOS 内存分配行为

转载 作者:行者123 更新时间:2023-12-03 18:55:58 26 4
gpt4 key购买 nike

当我尝试在运行 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,这更有意义。

这是我使用的 super 简单的代码:

for (int i = 1; ; ++i)
{
void *p = malloc(512 * 1024);
NSLog(@"%d %p", i, p);
memset(p, 0, 512 * 1024);
}

我认为 iPhone 没有任何虚拟内存系统可以解释与此类似的行为。对此有何合理解释?

最佳答案

在 iOS(以及许多其他系统)上,对 malloc() 的调用实际上并不分配内存。它从操作系统/内核请求内存,但直到内存被写入(例如使用memset()),请求才会得到满足。这可以提高系统内存管理的效率,但它可以导致误导性的 malloc() 行为。

关于iphone - 奇怪的 iOS 内存分配行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4868279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com