加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 大小为2 ^ 25的数组

发布时间:2020-12-16 10:43:12 所属栏目:百科 来源:网络整理
导读:我试图在c中创建一个大小为2 ^ 25的数组,然后对它执行一些基本操作(memsweep函数). c代码是 #include stdio.h#include time.h#define S (8191*4096)main(){ clock_t start = clock(); unsigned i; volatile char large[S]; for (i = 0; i 10*S; i++) large[(
我试图在c中创建一个大小为2 ^ 25的数组,然后对它执行一些基本操作(memsweep函数). c代码是

#include <stdio.h>
#include <time.h>
#define S (8191*4096)
main()
{
                clock_t start = clock();
                unsigned i;
                volatile char large[S];
                for (i = 0; i < 10*S; i++)              
                large[(4096*i+i)%S]=1+large[i%S];

                printf("%fn",((double)clock()-start)/CLOCKS_PER_SEC);
}

我能够编译它,但在执行时它会给出分段错误.

解决方法

你没有那么多的堆栈空间来分配一个大的数组…例如,在Linux上,堆栈大小通常是8192字节.你肯定超过了那个.

最好的选择是使用malloc()在堆上分配内存.所以你会写char * large = malloc(S);.您仍然可以使用[]表示法访问数组.

或者,如果你在Linux上,你可以在命令行上调用sudo ulimit -s X,其中X是一个足够大的数字,以便你的数组适合堆栈……但我通常不鼓励这个解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读