如何处理iPhone上的大量数据?

时间:2012-11-19 12:53:57

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

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

任何想法我怎样才能在设备上完成这项工作?

1 个答案:

答案 0 :(得分:4)

这是要在堆栈上分配的太多数据。根据{{​​3}} 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);