如何开1e31的数组

img


这个会溢出,但是数组范围必须这么大,咋办
或者有啥可以代替一下不

你确定你要开这么大的数组?你的内存够用吗?
1e31是一个double类型,表示1x10^31,是1后面有31个零,你用一个整型存储这么大的数?不溢出才怪。你还要开这么大的数组?就是把全世界的内存借给你用都不够。
也许你想要的是2^31,这也是一个很大的数。如果你要开辟这么大的整型数组,所需的内存大小至少为2^31*4=8GB。

当程序需要使用比如2GB~1TB左右的存储时,最简单的办法恐怕得是用文件读写模拟内存读写了吧。windows参考_fseeki64函数,linux参考fseeko64函数。

FILE *fA;fA=fopen("A","rb+");_fseeki64(fA,10000000000i64*sizeof(int),SEEK_SET);fputc(fA,0);//int A[10000000000];
int B;
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fread(&B,1,sizeof(int),fA);//B=A[9999999999];
_fseeki64(fA,9999999999i64*sizeof(int),SEEK_SET);fwrite(&B,1,sizeof(int),fA);//A[9999999999]=B;
fclose(fA);