在具有 24 位索引数组的 macbook pro 上出现段错误

发布于 2024-09-07 04:49:39 字数 882 浏览 8 评论 0原文

我正在使用 GCC + 终端来创建素数数组。

我曾经询问过 #[email protected],但我仍然不知道理解:

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

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

这是否意味着创建一个 long int 数组并不能解决问题?有没有某种(相当快的)方法可以绕过这个问题,比如使用 int[][] 来存储这些数字?或者可能是使用任意数量的字节来存储数字的包含或库?



    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];  
    }

I am using GCC + the terminal to make an array of prime numbers.

I once asked on #[email protected], but I still don't understand:

An int can store values on 32 bits (so a total of 2^32 unique values), but can't an array have more than 2^24 values ?

I'm not sure, but is Why 24 bits registers? already answers my question ?

And does that mean that making an array of long int doesn't solve the problem ? Is there some (proportionately fast) way I can bypass this, like using an int[][] to store those numbers ? Or maybe an include or lib to use an arbitrary number of bytes to store numbers ?



    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];  
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蒲公英的约定 2024-09-14 04:49:39

由于您是在堆栈上创建数组,因此我认为您的段错误是由堆栈溢出引起的。我建议在堆上创建如此大的数组,如下所示:

int* array = malloc(17000000 * sizeof(int));

因此,出现段错误的原因与使用大于 2^24 的索引无关,但事实上所有数组组合的大小大于堆栈的大小,导致堆栈溢出。

Since you are creating your arrays on the stack, I suppose your segfault is caused by a stack overflow. I would suggest creating such big arrays on the heap, like this:

int* array = malloc(17000000 * sizeof(int));

So the reason that you get a segfault has nothing to do with using indexes larger than 2^24 but with the fact that the size of all your arrays combined is larger than the size of the stack, causing a stack overflow.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文