iOS 4.2.1を実行しているiPhone 3Gに大量のメモリを割り当てようとしているときに、私は非常に奇妙なことに気付きました。奇妙なiOSメモリ割り当ての振る舞い
私はループ内でmalloc(512 * 1024)
を呼び出すと、それは私が私が私のiPhoneは、RAMの750メガバイトをしないと思うので、それは、私を驚かNULL
と
app(2032,0x3e7518b8) malloc: *** mmap(size=524288) failed (error code=12)
*** error: can't allocate region
を取得した後、約1500回の有効なポインタを返します。 。その後、私はmalloc
の後にmemset
を追加し、割り当ての数を120に減らしました。これははるかに理にかなっています。 iPhoneはこれと同様の挙動を説明することができる任意の仮想メモリ・システムを持っていなかったけれども、私は
for (int i = 1; ; ++i)
{
void *p = malloc(512 * 1024);
NSLog(@"%d %p", i, p);
memset(p, 0, 512 * 1024);
}
:ここ
は、私が使用する超簡単なコードです。これについて合理的な説明は何でしょうか?