gpt4 book ai didi

c - 分配并初始化大内存空间

转载 作者:行者123 更新时间:2023-11-30 18:53:39 26 4
gpt4 key购买 nike

我有一个功能如下:

float* Alocate2DBlankMemoryContinousSpace(int w, int h)
{
float *matrix = (float*)malloc(w*h*sizeof(float));
for (int i = 0; i<w*h; i++)
matrix[i] = 0.0;
return matrix;
}

用于二维分配 vector 。对于像 w=1000 和 h=1000 这样的小 vector ,它可以正常工作,但对于更大的 vector ,存在内存访问冲突写入位置的问题,事实上我有很多可用内存要写入。如何在连续内存中分配和初始化大空间?

最佳答案

1000x1000 float(32 位)缓冲区将使用 4,000,000 字节 (3.8MiB),应该可以正常运行。我很好奇什么值对你来说失败,也许 10000x10000 会失败,因为如果你在 32 位进程中运行,那将是一个 381MiB 大小的缓冲区可以看到如果您调用函数 3 次或更多次,您可能会耗尽空间。

无论如何,你的代码中有一些坏习惯,首先是你没有检查分配是否成功,然后你在calloc时将自己的内存清零> 可能会更快。如果分配失败,malloc 将返回 NULL,但当您自己将内存归零时,您仍然会取消引用指针。

这样做:

float* matrix = calloc( width * height, sizeof(float) );
if( matrix == NULL ) exit(1); // Bad-allocation, either terminate or fail gracefully and inform the user of the condition.
return matrix;

关于c - 分配并初始化大内存空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32386204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com