今天遇到一个奇怪的错误,还是没看懂:
long long N = 2000;
long long N2 = N*N;
long long *s = malloc(sizeof(long long)*N2); // create array
// populate it
for (long long k = 1; k <= 55; k++) {
不会产生任何错误,但是
long long N = 2000;
long long N2 = N*N;
long long s[4000000]; // create array
// populate it
for (long long k = 1; k <= 55; k++) {
在将 1 分配给 k之前for
(根据调试器),在行上给我一个 code=2 EXC_BAD_ACCESS ,就好像没有空间可以分配另一个 8 字节变量一样。此代码位于方法的开头;没有分配或分配其他变量。我猜我根本无法将 4000000 个元素的 long long 数组分配给堆栈,但不知何故我可以将它分配给动态堆。有人可以解释发生了什么,限制是什么等?这是运行 Mountain Lion、2GB RAM 的 Mac 上的 Objective-C。long long 是 8 字节宽,所以数组应该只有 32MB;我不明白为什么这应该是一个问题。
谢谢!
(顺便说一句,如果细节看起来很熟悉,那是因为这是我解决 Project Euler问题 149的开始。我已经避免在这里提到解决方案的任何细节,因为我已经解决了这个问题。)