|
下面这段代码,申请使用1GB的内存:- #include<cstdio>#include<cstring>const long long n=1<<27;long long a[n],i,s;int main(){ memset(a,-1,sizeof(a)); for(s=i=0;i<n;i++) s+=a[i]; printf("%I64d\n",s); return 0;}
复制代码 编译和运行都是没问题的,但把
const long long n=1<<27;
改成
const long long n=1<<28;
编译就出错了,原因是使用了超过2GB大小的内存。
但我的编译环境是64bit的:
理论上应该支持申请和使用2GB以上的内存的。
应该做些什么尝试,才能突破这个2GB的限制呢?
#####
此外,由于大数据计算的需要,我还希望使用long long类型的数值来表示数组大小,例如:
char a[1<<33];
而“1<<33”超过了int范围,目前被识别成0了,无法正确识别成2的33次方。
我应该做些什么尝试,才能使用long long类型的数值来表示数组大小呢? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|