首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iPad崩溃以及可能相关的内存问题

iPad崩溃以及可能相关的内存问题
EN

Stack Overflow用户
提问于 2010-09-08 01:24:16
回答 3查看 1.8K关注 0票数 2

我正在移植PC游戏到iPad,它有吨的图形资产(超过250MB),我大约一半。我直到现在还没有iPad,所以我只在模拟器上测试了它,一切都很好。但当我第一次在设备上运行它时,它崩溃了。我从控制台得到的只有

代码语言:javascript
运行
复制
Program received signal:  “0”.

Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/Developer/usr/lib/libXcodeDebuggerSupport.dylib")

启动时也有警告,我在模拟器上没有,我不知道它是什么意思,也不知道它是否相关:

代码语言:javascript
运行
复制
warning: Unable to read symbols for "/Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.2/Symbols/System/Library/AccessibilityBundles/AccessibilitySettingsLoader.bundle/AccessibilitySettingsLoader" (file not found).

我能够确定在加载纹理的过程中游戏崩溃,大部分时间是在

代码语言:javascript
运行
复制
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);

我使用从样本中加载的标准纹理,到目前为止它工作得很好。我估计在崩溃的时候我分配了几十mb的纹理(我现在不能给你确切的数字)。

我不是任何方面的专家,但我似乎没有得到任何内存警告(我检查它们),但似乎内存不足。有没有可能我一次分配的内存比我能分配的内存多,它在发出内存警告之前就崩溃了?最让我惊讶的是,它没有抛出异常或任何东西,它只是在我身上死掉了。即使是调试器也不会告诉我任何事情。

还有什么其他的想法会导致这次崩溃吗?

最后一件事,我知道这个问题以前已经被问过无数次了,但似乎没有人对此有好的答案。无论如何,我会尝试问:)我的应用程序可以获得多少MB内存?是否有保证的最小值或理论上的最大值(但仍然可达:)?有没有办法确保我有足够的内存?

游戏有很多花哨的艺术图形,即使我使用缓存,我释放了当前不使用的纹理,但仍然会有几十mb的纹理需要一次。这样的事情有可能发生吗?职业游戏是如何处理大量数据的?任何文章都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-08 01:43:10

我的应用程序可以获得多少MB内存?是否有保证的最小值或理论上的最大值(但仍然可达:)?

您可以有500MB的空闲内存,但它可能由于碎片而不可用(例如,程序XYZ可能占用了255到284MB之间的空间)。因此,存在一个内存问题,每个调用的malloc()都可以使用内存。

如今,这种情况很少见(内核和垃圾回收器足够智能),但“内存不足”仍然是“无法加载共享库*.dylib:找不到渴望N mbs的空闲空间段”。

票数 1
EN

Stack Overflow用户

发布于 2010-09-08 05:08:13

当前型号的iPad在系统上总共只有256MB的可用空间,现在在我的设备上运行Instruments显示,在考虑到其他所有因素后,它只有大约70MB的可用空间。因此,当涉及到纹理时,“几十MB”可能会推动它,这取决于“几个”有多大。

如果你在一个不在后台线程上的操作中加载大量的纹理,你不会收到内存警告,因为你会阻塞主线程,并阻止你的应用程序接收这些警告。可以一次加载几个纹理,可以在后台线程上加载,也可以通过让run循环在每个较小的纹理加载之间完成,并查看是否可以在加载过程中的某个点捕获内存警告。

苹果在OpenGL ES编程指南中有一个"Best Practices for Working with Texture Data“部分,我建议你读一读。它有几个最小化纹理数据大小的技巧,其中最重要的是使用PowerVR纹理压缩来大量减少内存中的大小。

票数 3
EN

Stack Overflow用户

发布于 2010-09-08 02:45:35

您是否在写入/加载之前检查所有内存分配和数组边界?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3661051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档