代码之家  ›  专栏  ›  技术社区  ›  Lope

iPad崩溃和可能相关的内存问题

  •  2
  • Lope  · 技术社区  · 14 年前

    我从控制台得到的是

    Program received signal:  “0”.
    

    Data Formatters temporarily unavailable, will re-try after a 'continue'. (Unknown error loading shared library "/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的纹理(我现在不能给你确切的数字)。

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

    还有什么能导致这次事故的吗?

    游戏有很多花哨的艺术图形和我,即使我使用缓存和我发布的纹理,目前还没有使用,仍将有几十兆的纹理需要在同一时间。这样的事情可能吗?专业游戏如何处理大量数据?任何文章都将不胜感激。

    3 回复  |  直到 14 年前
        1
  •  1
  •   kagali-san    14 年前

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

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

    现在这种情况很少见(内核和垃圾收集器足够聪明),但“内存不足”是“无法加载共享库*.dylib:找不到渴望N MB的可用空间段”。

        2
  •  3
  •   Brad Larson    14 年前

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

    苹果有一个 Best Practices for Working with Texture Data

        3
  •  0
  •   hotpaw2    14 年前

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