我似乎在我的申请中遇到了一些限制,但我很困惑。
编辑下来,问题代码似乎是:
NSInteger tcMax = 9000000; // 8 million here and all is ok. 9 or more = crash
char tcBuffer[tcMax];
[self doSomething]; // EXC BAD ACCESS here. Or whatever other line of code is here
我已将这些线条粘贴到一个新项目中并且一切都很好,所以似乎还有其他因素在起作用。是否可以通过特定方法分配总字节数的最大值?或者其他一些限制,我可以在这个8/9 Mb点左右倾斜?
答案 0 :(得分:0)
我没有在我面前安装我的Mac,但我相当确定9 MB是否太大了堆栈分配。您将在固定大小的阵列中使用大量内存分配来填充堆栈(因此,堆栈溢出)。转换为堆分配:
char* tcBuffer = (char*)malloc(tcMax);
[self doSomething];
// before the function/method returns call this:
free(tcBuffer);
tcBuffer = NULL;
在这方面,iOS可能与MacOS有不同的行为。
答案 1 :(得分:0)
动态程序存储器受限(最大值变化)。
对于大型数组,使用malloc
和free
来使用堆。