当内存足够时,malloc()为什么会失败?

当内存足够时,malloc()为什么会失败?

我正在使用一个具有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"。

我怎么才能解决这个问题?

相关推荐

现在都在考华为认证,含金量高不高呢?该如何备考?
Windows11关机选项在哪里 Windows11关机操作方法【介绍】
手把手教你在Linux系统终端输出的内容如何保存到文件里面
警惕非法金融平台:深度解析联币金融骗局及金融产品风险识别