曲の一部を分析する必要があります。iPhoneシミュレーターでテストしたとき、myArray[150][220500]
大きな2D配列を使用しました。そのため、十分なメモリがないため、このコードをデバイスで動作させることができません(コードは小さい2D配列で動作しますが、十分ではありません)分析用)。
どうすればこれをデバイスで動作させることができますか?
曲の一部を分析する必要があります。iPhoneシミュレーターでテストしたとき、myArray[150][220500]
大きな2D配列を使用しました。そのため、十分なメモリがないため、このコードをデバイスで動作させることができません(コードは小さい2D配列で動作しますが、十分ではありません)分析用)。
どうすればこれをデバイスで動作させることができますか?
これは、スタックに割り当てるにはデータが多すぎます。ドキュメントによると、iOSにはメインスレッドに1MBのスタックスペースしかなく、セカンダリスレッドには512KBがあります。少なくとも割り当ててmyArray
いる(4バイト)として宣言されていると仮定しますint
(4 * 150 * 220500) bytes = 132300000 bytes = 126.171 MB
malloc
またはを使用する代わりに、ヒープにメモリを割り当てる必要があります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);