消息关闭
    暂无新消息!
#include "stdio.h"
#include "stdlib.h"
void main(){
double **a;
int i;
int j;
int m = 22500;
 a = (double**)malloc(sizeof(double*)*m);
 for (i = 0; i<m; i++){
 a[i] = (double*)malloc(sizeof(double)*m);
 }
for(i=0;i<m;i++)
for(j=0;j<m;j++){
a[i][j]=0;
}

free(a);
}

6个回答

︿ 1
你这是要测试CPU和内存的极限吗?还是纯粹想玩,测试一下?
22500 × 22500 × 8 / (1024 × 1024 × 1024) 大约为3.77个G,堆上的空间没这么大吧(还得考虑一下你的PC内存)
︿ 1
1. a[i]也是要free的.
2. 申请的内存差不多有8G, 而且是碎片化的,运行需要比较长时间, 要考虑一下是不是设计不合理.
︿ 0
仅供参考:当程序需要使用比如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);

︿ 0
非得这样申请内存还想快, 那是不可能的, 但是完成一个任务方法有很多, 你应该描述一下原始需求.