获取iOS应用程序使用的实际数量的OpenGL纹理内存

SO中有几个类似于这个的问题,但是他们没有一个能够解释在设备上获取iOS应用程序使用的实际OpenGL纹理内存的确定方法。

我知道如何手动计算上传到OpenGL时我的纹理将使用多less内存。 我想知道如果我可以从设备中获得确切的OpenGL使用的内存量。

我想避免看看仪器上的内存监视器小部件中的真实内存和虚拟内存列(我的理解是这些聚合纹理内存和应用程序的正常内存)。 我认为这与这里或这里显示的方法类似。

我不介意是否使用任何外部工具或以编程方式获取纹理内存。 但是我只想要设备报告的真正的OpenGL内存,而不是聚合。


另外,有人可以解释什么'虚拟内存'专栏准确地意味着在iOS? 我想我理解虚拟内存的概念,但是我想弄清楚虚拟内存列是否也与iOS低内存警告相关,或者只与Real Memory列有关。

我的答案不完美,但…

在连接设备并打开项目的情况下,确保将实际设备选作执行目标,而不是模拟器。 select产品 – >configuration文件。

乐器会上来。 select“OpenGL ES分析”模板。 仪器应该打开两台仪器 – “OpenGL ES分析仪”和“OpenGL ES驱动程序”。

点击分析仪的'i',并勾选'上传的纹理字节'。 你会得到一个上传的字节数的图表。

在仪器顶部和底部面板之间的分界线之后,您应该在箭头形框中看到文本“OpenGL ES Analyzer”,可能指向“专家”一词。 点击“专家”并select“框架统计”。 你会得到一个表格,其中的一列是'Uploaded Texture Bytes'。

这是令人讨厌的部分:列出每帧中上传的字节数。 到目前为止,我还没有find一种方法来获得当前的居民成本,或者以其他方式进行自动计算。 但它只显示仪器检测范围内的内容 – 通过窗口工具栏上的时钟button设置 – 所以您可以限制检查到一定的时间段,然后自己合计结果。

编辑:我不能是'虚拟内存'列的确切含义(你指的内存监视器工具,大概?)100%权威确定,但iOS有一个function齐全的虚拟内存系统。 它唯一不会做的就是将页面数据输出到磁盘。 然而,你可以映射一个文件的内存,操作系统很可能使用通常的虚拟方法来分配内存。 什么malloc和co。 创build是一个保留一个地址空间块的票。 实际的内存不会被放入该地址空间,除非或直到您使用它。 由于它本质上是免费的,因此可能会分配比您实际使用的更多的虚拟内存。 毫无疑问所有的基础对象都针对内存pipe理系统进行了优化。