SO中有几个类似于这个的问题,但它们似乎都没有解释在设备上获取iOS应用程序使用的实际OpenGL纹理内存的确定方法。
我知道如何手动计算上传到OpenGL时纹理将使用多少内存。我想知道我是否可以从设备中获得确切的OpenGL使用内存量。
我想避免在Instruments上的Memory Monitor小部件中查看Real Memory和Virtual Memory列(我的理解是这些聚合纹理内存和app的常规内存)。我认为这类似于here或here所示的方法。
我不介意是使用任何外部工具还是以编程方式获取纹理内存。但我只想要设备报告的真实OpenGL内存,而不是聚合。
此外,有人可以解释“虚拟内存”列在iOS上的确切含义吗?我想我理解Virtual Memory的概念,但我想弄清楚虚拟内存列是否也与iOS低内存警告有关,或者只是真实内存列。
答案 0 :(得分:4)
我的回答并不完美,但是......
在连接设备并打开项目的情况下,确保选择实际设备作为执行目标而不是模拟器。选择产品 - >轮廓。
仪器会出现。选择“OpenGL ES Analysis”模板。仪器应打开两个有效的仪器 - “OpenGL ES Analyzer”和“OpenGL ES Driver”。
单击分析器的“i”并勾选“Uploaded Texture Bytes”。您将获得上传的字节数的图表。
在仪器的顶部和底部面板之间的分界线之后,您应该在箭头形状的框中看到文本“OpenGL ES Analyzer”,可能指向“专家”一词。单击“专家”并选择“帧统计”。您将获得一个表,其中一列是'Uploaded Texture Bytes'。
这是烦人的部分:列出每帧中上传的字节数。到目前为止,我还没有找到一种方法来获取当前的常驻成本或以其他方式使用该列进行任何自动计算。但它只显示仪器检测范围内的内容 - 由窗口工具栏上的时钟按钮设置 - 因此您可以将检查限制在特定时间段内,然后自行累加结果。
编辑:我不能100%确定“虚拟内存”专栏的确切含义(大概是指内存监视器工具?)但iOS有一个功能齐全的虚拟内存系统。它唯一不会做的是将数据输出到磁盘。但是,您可以对内存映射文件,操作系统可能会使用通常的虚拟方法来分配内存。什么malloc
和合作。 create是一个保留一块地址空间的票证。除非或直到您使用它,否则实际内存不会放入该地址空间。因为它基本上是免费的,所以你可能会分配比你实际使用的虚拟内存更多的内存;毫无疑问,所有基础对象都针对正在运行的内存管理系统进行了优化。