首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存分配失败

内存分配失败
EN

Stack Overflow用户
提问于 2016-10-19 12:58:04
回答 1查看 129关注 0票数 1

我正在创建一个简单的计算系统,进行一些计算,并存储所有的结果。我需要存储大约36000个时间步骤,空间粒度为100万个元素。我似乎需要分配36000 * 1000000 * sizeof(double) = 237.191 MB,这在拥有16 GB内存的PC上应该不是问题。然而,在522的时间步骤,我得到了bad_alloc。我的计算是错误的,还是Windows上有一些非常严格的内存管理规则?

守则是:

代码语言:javascript
复制
int timeSteps=std::ceil(3600.*10./1.); //10 hours with 1 second step
int Nx=1000, Ny=1000; //grid resolution in x and y direction

cout<<"Time steps "<<timeSteps<<endl;
cout<<"Grid dimensions Nx*Ny "<<Nx<<"*"<<Ny<<endl;
cout<<"Total memory used: "<<(double)(Nx*Ny*timeSteps*sizeof(double))/1000000.<<" MB"<<endl;

std::vector<double*> timeStepSolution;
timeStepSolution.reserve(timeSteps);

for (int i=0;i<timeSteps;i++)
{
    cout<<i<<endl;
    double *p=new double[Nx*Ny];
    timeStepSolution.push_back(p);
}

for (int i=0;i<timeSteps;i++)
{
    for (int j=0;j<Nx*Ny;j++)
       timeStepSolution[i][j]=rand() % 100;
}

for (int i=0;i<timeSteps;i++)
{
    delete[] timeStepSolution[i];
}
timeStepSolution.clear();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-19 13:03:32

代码语言:javascript
复制
36000 * 1000000 * 8 = 288000000000 bytes

即:

代码语言:javascript
复制
288000000000 / 1024 = 2812500000.00 kilobytes

281250000.00 / 1024 = 274658.20 megabytes

274658.20 / 1024 = 268.22 gigabytes

你在计算中是稍微偏离

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40132071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档