1

嗨,我对分配的内存感到不安,因为我在 Instruments 中注意到很多堆增长,所以我设计了一个测试应用程序。

测试应用包含两个 ViewController,每个都有一个按钮。第一个 ViewController 通过 Segue Modal 链接到 SecondViewController(它根本没有代码——除了自动生成的)。

第二个 ViewController 只有功能

 -(IBAction)back:(id)sender{
      [self dismissModalViewControllerAnimated:YES];
}

所以我可以翻转抛出视图。

当我用仪器测试它时,我注意到在我进入第二个视图并返回后堆增长。

在此处输入图像描述 在此处输入图像描述

这怎么可能?我错过了什么?

4

1 回答 1

1

堆的大小不是应用程序内存使用量。

当您的应用程序处于活动状态时,内核将不得不为您分配内存。
现代系统使用虚拟内存。基本上,它们将物理地址映射到您的进程将访问的虚拟地址。

这个映射由内核处理,它需要内存。

如果您请求 1MB 的内存,则必须通过增加地址空间的大小来分配内存以跟踪分配的物理页面。

如果释放所有内存,内核通常会保留用于映射的内存,并将其重新用于下一次分配,从而避免为它重新分配空间。

这就是堆大小不变的原因。但它根本不表示您的应用程序的内存使用情况。

如果使用 Instruments,请查看 VM Tracker 工具。

于 2013-01-09T09:18:11.453 回答