2011-12-28 54 views

回答

1

可能是页面错误问题。如果malloc占用一大块RAM,物理RAM可能不会立即分配,某些页表项将被设置。物理内存将不会被分配,直到您第一次访问它的位置。这涉及

  • 页面错误,
  • 找到一个物理内存页
  • 该页
  • 上归零每个位置更新页面表

这来讲是一个昂贵的操作时间和将发生一次每个分配的页面(550 x 4kbyte页为您分配的RAM)

+0

为什么应该有更多的页面fau当我更频繁地重新分配块时? iPad L2缓存为1MB,因此静态/堆栈内存也会出现页面错误。调零参数仅适用于calloc-ed内存。 Malloc不会记忆零。您能否向您的帖子添加更多解释? – Etan 2011-12-28 17:04:59

+0

@Etan:据推测它不会重复使用相同的内存块,或者在释放内存时将内存回送给操作系统(内存在iDevices上受限,所以这绝对是一种可能性)。静态存储器是永久分配的,堆栈存储器可能会在第一次使用时永久分配。 – JeremyP 2011-12-28 17:08:17

+0

因此,基本上延迟的分配是在这里杀死我的。这也解释了为什么calloc比memset或{0}初始化器快得多。每次使用同一块内存不应该改变页面错误的数量,因为即使在旧页面被重用的情况下,该页面在免费呼叫之后仍会变脏。 – Etan 2011-12-28 17:12:38