0

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

有什么想法我怎么能在设备上完成这项工作?

4

1 回答 1

4

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

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

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

//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);
于 2012-11-19T13:21:45.243 回答