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)
由于您是在堆栈上创建数组,我认为您的segfault是由堆栈溢出引起的.我建议在堆上创建这样的大数组,如下所示:
int* array = malloc(17000000 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)
因此,您获得段错误的原因与使用大于2 ^ 24的索引无关,但事实是所有组合的大小都大于堆栈的大小,导致堆栈溢出.