DR:是一个
IOSurfaceRef
清除并将其状态更改为后要写入的有效表面
kIOSurfacePurgeableEmpty
?
我想更好地理解
IOSurface
被净化。我遇到的唯一文件是
IOSurfaceRef.h
我遇到的唯一示例代码是WebKit。
我正在使用命令行工具
memory_pressure
要模拟临界内存压力环境10秒钟,请执行以下操作:
> memory_pressure -S -s 10 -l critical
我编写了一个非常简单的应用程序,它可以分配100个
IOSurfaces
具有相同的属性。当我使用仪器测量内存分配时,我看到
VM: IOSurface
大约6GB,每个表面约6MB。(4096X4096X4)
然后我改变每一个的可清除状态
碘表面
到
kIOSurfacePurgeableVolatile
运行内存压力模拟。
仪器仍然报告我分配了6GB的表面。但是,如果我检查每个表面的可清除状态,它们会被标记为
无需手术治疗
.
所以看起来它们被成功清除了,但是内存仍然分配给我的应用程序。为什么会这样?这些表面处于什么状态?
头文件声明我应该假设它们中有“未定义的内容”。够公平的。
但事实上
碘芥
或
IOSurface *
对象仍然有效?我可以成功地查询它的所有属性,并且可以成功地为读写而锁定它。
是否允许我重新使用该对象,即使其内容已被清除,还是必须放弃该实例并创建一个全新的iosurface?
麦考斯10.14