【问题标题】:How do I work with big amount of data on IPhone?如何在 iPhone 上处理大量数据?
【发布时间】:2012-11-19 12:53:57
【问题描述】:

我需要分析歌曲的一部分。当我在 iPhone 模拟器上进行测试时,我使用了 myArray[150][220500] 大的 2d 数组。所以..我无法让这段代码在设备上工作,因为它没有足够的内存(代码适用于较小的 2d 数组,但是分析不够)。

有什么想法可以在设备上完成这项工作吗?

【问题讨论】:

    标签: objective-c memory-management cocos2d-iphone


    【解决方案1】:

    在堆栈上分配的数据太多。根据documentation,iOS 在主线程上只有 1MB 的堆栈空间,辅助线程获得 512KB。假设 myArray 被声明为 int(4 个字节),您至少要分配

    (4 * 150 * 220500) bytes = 132300000 bytes = 126.171 MB

    您需要在堆上分配内存,而不是使用malloccalloc

    //Initialize array
    int **myArray = malloc(150 * sizeof(*myArray));
    for(unsigned int i = 0; i < 150; ++i)
    {
        //Use calloc if you want all 0's
        myArray[i] = malloc(220500 * sizeof(**myArray));
    }
    
    //Use array
    myArray[10][2000] = 36;
    NSLog(@"[10][2000] = %d", myArray[10][2000]);
    
    
    //Delete array - You must do this to prevent memory leaks
    for(unsigned int i = 0; i < 150; ++i)
    {
        free(myArray[i]);
    }
    free(myArray);
    

    【讨论】:

    • 谢谢!它的答案很好,但我仍然得到这个“错误:无法分配区域”,“在 malloc_error_break 中设置断点进行调试”
    • 你确定你甚至需要分配那么多数据吗?有点多,可能还有更好的办法。
    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 2013-04-09
    • 2014-06-12
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多