gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:48:11 28 4
gpt4 key购买 nike

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

Program received signal:  “0”.

数据格式化程序暂时不可用,将在“继续”后重试。 (加载共享库“/Developer/usr/lib/libXcodeDebuggerSupport.dylib”时出现未知错误)

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

warning: Unable to read symbols for "/Developer/Platforms/iPhoneOS.platform/DeviceSupport/3.2/Symbols/System/Library/AccessibilityBundles/AccessibilitySettingsLoader.bundle/AccessibilitySettingsLoader" (file not found).

我能够确定游戏在加载纹理期间崩溃,大部分时间在

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);

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

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

还有什么其他想法会导致此崩溃吗?

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

游戏有很多精美的艺术图形,尽管我使用缓存并释放当前未使用的纹理,但一次仍然需要几十MB的纹理。这样的事情有可能吗?职业游戏如何处理大量数据?任何文章将不胜感激。

最佳答案

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

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

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

关于iphone - iPad 崩溃以及可能相关的内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3661051/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com