我正在使用一个具有128 to内存的服务器进行一些计算。我需要malloc()大小为56120 * 56120的二维浮点数组。示例代码如下:
代码语言:javascript运行复制int main(int argc, char const *argv[])
{
float *ls;
int num = 56120,i,j;
ls = (float *)malloc((num * num)*sizeof(float));
if(ls == NULL){
cout << "malloc failed !!!" << endl;
while(1);
}
cout << "malloc succeeded ~~~" << endl;
return 0;
}代码编译成功,但当我运行它时,它是"malloc failed !!!"。根据我的计算,只需大约11 to的内存就可以容纳整个数组。在启动代码之前,我检查了服务器,可用的空闲内存为110 of。为什么会发生错误?
我还发现,如果我将num减少到40000,那么malloc就会成功。
这是否意味着malloc()对可以分配的最大内存有限制?
此外,如果更改分配方式,直接声明这样大小的2D浮点数数组,如下所示:
代码语言:javascript运行复制int main(int argc, char const *argv[])
{
int num = 56120,i,j;
float ls[3149454400];
if(ls == NULL){
cout << "malloc failed !!!" << endl;
while(1);
}
cout << "malloc succeeded ~~~" << endl;
for(i = num - 10 ; i < num; i ++){
for( j = num - 10; j < num ; j++){
ls[i*num + j] = 1;
}
}
for(i = num - 11 ; i < num; i ++){
for( j = num - 11; j < num ; j++){
cout << ls[i*num + j] << endl;
}
}
return 0;
}然后我编译并运行它。我得到了一个"Segmentation fault"。
我怎么才能解决这个问题?