“malloc”无法为大小为 30 亿的浮点数组分配内存

'malloc' is unable to allocate memory for a float array for size 3 billion

提问人:m_here 提问时间:4/7/2023 最后编辑:m_here 更新时间:4/7/2023 访问量:76

问:

我一直在尝试将一个 2-d 连续数组分配为:

float **objects;
long long len;
len = (*numObjs) * (*numCoords);
objects = (float **)malloc((*numObjs) * sizeof(float *));
assert(objects != NULL);
objects[0] = (float *)malloc(len * sizeof(float));
if (objects[0] == NULL) {
    perror("malloc" );
    abort();
}
for (i=1; i<(*numObjs); i++)
     objects[i] = objects[i-1] + (*numCoords);

其中 和 .(*numObjs) = 500 million(*numCoords) = 6

perror 显示的错误为:malloc: Cannot allocate memory

对于,它工作正常。但比这更大的是,它抛出了上述错误。(*numObjs) = 200 million

另请注意,我有大约 14 GB 的可用物理内存和巨大的可用交换空间。

c malloc 不足 堆内存 动态分配

评论

0赞 Mike Nakis 4/7/2023
您可能正在编译为 32 位而不是 64 位。检查编译器的选项。
0赞 Simon Goater 4/7/2023
objects 数组为 4GB,object[0] 数组为 12GB。12 + 4 = 16。我不知道这是否会有所帮助,但如果你想强迫它,你可以尝试增加系统的交换性(在 linux dunno 关于 windows)。

答: 暂无答案