iOS VM Tracker 中的“脏内存”和“脏大小”有什么区别?

问题描述 投票:0回答:1

在 WWDC 2022 会议上(https://developer.apple.com/videos/play/wwdc2022/10106/),他们解释了内存分配可以分为三种类型:脏内存、压缩脏内存和干净内存。脏内存是指像堆分配这样的分配,往往具有较高的常驻内存比率。

当我在 Xcode 工具中使用 VM 跟踪器分析 iOS 应用程序时,我可以看到像 malloc 这样的分配被归类为脏类型。

enter image description here

尽管如此,由于视图顶部同时存在“脏”内存类型和“脏大小”指标,我仍然感到困惑。

我的猜测是脏内存“类型”是指像 malloc 这样的分配类型,这可能会导致脏页。

“脏大小”指标可能表示已写入并因此成为脏页的已分配内存页的累积大小。

例如,malloc 是“脏类型”,但它的“脏大小”几乎可以为零字节。 -我可以使用 malloc 为新数组进行分配,但不为其分配任何值,因此提交的页面实际上不会映射到物理内存。

int *array = malloc(2000 * sizeof(int));

不过,我还是不确定。如果有人能澄清这些术语的确切定义,我将不胜感激。

ios instruments virtual-memory
1个回答
0
投票

“*Dirty*”部分包含至少有一个脏页的所有内存区域(例如,malloc 区域)。 “脏大小”列确实指的是已写入的页面中包含的内存量。因此,以您的代码为例:

int *array = malloc(2000 * sizeof(int));

运行这行代码后,

array
将显示在*All*部分,而不是*Dirty*部分。

array[100] = 100

运行这行代码后,

array
将显示在*脏*部分,其中一页内存被弄脏。

© www.soinside.com 2019 - 2024. All rights reserved.