在带有24位索引数组的macbook pro上获得了段错误

gok*_*oon 2 c memory assembly segmentation-fault

我正在使用GCC +终端来制作一个素数数组.

我曾经问过#C@irc.freenode.net,但我仍然不明白:

int可以存储32位的值(所以总共有2 ^ 32个唯一值),但是数组的值不能超过2 ^ 24个值?

我不确定,但为什么24位寄存器?已经回答了我的问题?

这是否意味着制作一个数组long int并不能解决问题?是否有一些(按比例快速)的方式我可以绕过这个,比如使用int[][]存储这些数字?或者也许是一个include或lib来使用任意数量的字节来存储数字?



    int main()  
    {  
        int array1[160000];  
        printf("first array declared fine.\n");  
        int array2[170000];  

        int array3[1600000];  
        printf("first array declared fine.\n");  
        int array4[1700000];  

        int array5[16000000];  
        printf("first array declared fine.\n");  
        int array6[17000000];  
    }

Run Code Online (Sandbox Code Playgroud)

Job*_*Job 5

由于您是在堆栈上创建数组,我认为您的segfault是由堆栈溢出引起的.我建议在堆上创建这样的大数组,如下所示:

int* array = malloc(17000000 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

因此,您获得段错误的原因与使用大于2 ^ 24的索引无关,但事实是所有组合的大小都大于堆栈的大小,导致堆栈溢出.