我有一堆多维数组,它们在不同源文件的局部函数中分配,但我想使它们成为全局的。我正在考虑使用extern
,根据这个问题,我需要制作一个头文件,其中包括声明我的变量,然后定义该变量,只有一次,在一个源文件内。
但是,我用来生成多维数组的方法在一行中声明和定义变量,如下所示:
float (*data0)[224][3] = calloc(224, sizeof *data0);
是否有一种方法,我可以把它分成声明和定义,以便我可以使用这个方法,或者是更好的只是在头文件本身做这两个?
我正在用C语言实现一个神经网络,我在多个地方定义了很多数组。一开始我不认为我以后会需要它们,而且这应该在有内存限制的嵌入式系统中运行,所以我把这些数组都放在本地,并尽快在它们上使用free
。
但事实证明,我将需要它们来训练这个网络,所以我需要它们是全局的,这样它们就可以在函数的多次迭代中保存它们的值。另外,我不知道我们将要使用的系统会附带一个64MB的DRAM,所以内存限制不是一个大问题。
如果全局定义这些数组,则不需要动态分配内存。与堆栈空间不同,全局变量的大小没有实际限制。
假设你想要一个尺寸为224,224和3的3D数组,定义如下:
float data0[224][224][3];
然后在头文件中声明为:
extern float data0[224][224][3];
而且,全局变量默认为零初始化,因此不需要显式初始化。