gpt4 book ai didi

c - 头文件中缓冲区分配的可能性

转载 作者:太空宇宙 更新时间:2023-11-04 08:03:48 24 4
gpt4 key购买 nike

我想知道在 C 中是否可以在头文件中分配内存以便于我使用。例如,在我的源代码中,我像这样分配 data 缓冲区:

float *data = malloc((10*10) * sizeof(float));

我的代码将与其他人的代码进行比较,所以我只想在他的代码中插入我的函数 cluster(data, p, dim, ...) 并添加我的标题 (它也已经包括所有缓冲区分配)。这有效吗?

谢谢,

最佳答案

你可以在任何你喜欢的地方#include一个标题,所以即使不是很好的风格也是完全合法的

int myFunction()
{
#include "myfile.h"
}

但是,它对我来说看起来很可怕,并且应该被遗忘。

你的问题是你的线

float *data = malloc((10*10) * sizeof(float));

在函数体之外是非法的。你有两种解决方法。您可以将其包装在一个函数中:

float* getFloatArray(int count)
{
return malloc(count * sizeof(float));
}

如果你只想要一个实例,即使你多次调用它:

float* getFloatArray(int count)
{
static float* singleton = NULL;
if (singleton == NULL)
{
singleton = malloc(count * sizeof(float));
}
return singleton;
}

但是,如果您将其放在 header 中,就会面临链接时间重复符号的危险。如果将其设为静态,您将获得在包含 header 的每个编译单元中定义的相同功能。

然而,正如 olaf 所观察到的,您对 malloc 的参数是不变的,因此您可以只定义一个静态数组:

static float data[10 * 10];

但是,您仍然会为每个编译单元获得一个新实例。

我会将它(数组或函数)添加到一个新的 .c 文件中,并在您的 header 中放置一个 extern def,然后将您的 c 文件添加到链接阶段。

关于c - 头文件中缓冲区分配的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44138597/

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