使用大块内存的设置

(C++)

如下分配内存的代码:

booleantempTag=true;

do

{

try

{

double *K=NULL;

int nnz;

cout<<"请输入分配内存大小(MB):"<<endl;

cin>>nnz;

nnz=nnz*1024*1024/8;

cout<<"开始为数组分配内存..."<<endl;

system("pause");

K =(double *) malloc (sizeof(double)*nnz);

if(K!=NULL){

cout<<"为数组K设置初值..."<<endl;

system("pause");

memset(K,0,sizeof(*K)*nnz);

cout<<"按任意键释放内存..."<<endl;

system("pause");

free(K);

}

else{

cout<<"内存分配失败!"<<endl;

}

}

catch (std::bad_alloc)

{

cout<<"内存分配失败,可能是由于内存空间不足,请按任意键继续..."<<endl;

}

} while (tempTag);

任意输入分配的内存数目,有时候会分配成功,有时候却出现内存分配失败。分配失败主要原因有两种可能,第一种可能就是系统的可用内存不足够分配,这也是常见的一种情况,通过增加内存条或重启系统,保证有足够的可用内存供分配,如下图所示:


还有一种情况,是很容易忽视的,特别是对于需要大量内存进行计算(大于2G)时,调试时出现类似于“retval = HeapFree……”错误,如下图:

当分配小块内存时,如分配500M时,能正常分配;但是当分配大块内存时,如分配2G内存时,就分配失败,但是系统的可用内存足够(大于2G)。这种情况下,主要是项目属性设置的问题。需要在项目属性页中设置“配置属性”——“链接器”——“系统”,设置“启用大地址”为“是”,如下图所示:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值