mademao / iOSImageLoadAnalyze

iOS加载图片内存占用分析

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于 CoreGraphics 解码图片后,不占用进程内存的疑惑

niuniubuniu opened this issue · comments

“CGDataProviderCreateWithCopyOfData:使用mmap申请,不会计算在进程内存使用,但受设备mmap申请大小限制”

如上你说的 最后剩下的这个类型为 VM: CG Raster Data,我使用 VM Tracker 查看 Dirty 和 Compress memory,发现 CG Raster Data 在 Dirty 或者 Compress memory 的分类下,并且 memgraph 中 Dirty 也包含了CG Raster Data,,而一般 Dirty 和 Compress memory 是属于当前进程内存的。这里有点疑惑。

commented

Dirty Memory和Compress Memory表面这部分内存是否能被直接重新创建,它表面的是内存在申请创建后是否被程序进行过直接或间接的修改,CG Raster Data在申请创建后被用于图片解码使用,是会被程序修改的,所以这部分内存属于Dirty Memory或Compress Memory是没错的。
程序对于进程内存使用的统计有自己的规则,并不是所有的Dirty Memory和Compress Memory都会被统计进去,具体的统计规则需要我们去测试,同时这些规则在不同的系统版本上也有不同的策略。
所以CGDataProviderCreateWithCopyOfData申请的内存在VM Tracker中的表现和它是否会被系统计算在内存限制中是两回事,二者不会相互影响。

感谢大佬解答疑惑。
我实验了下关于重绘生成的 CG Raster Data,如果累计到一定 size(大于 footprint 内存限制),也会发出内存警告或者导致崩溃。毕竟这块内存还是会影响整个系统的内存情况。