在 C 中将 extern 与多维数组一起使用
Using extern with multidimentional arrays in C
我有一堆多维数组分配在不同源文件的局部函数中,但我想使它们成为全局的。我正在考虑使用 extern
,根据 this question,我需要制作一个头文件,其中包含变量的 声明 ,然后是 在一个源文件中只定义那个变量一次。
但是,我用来生成多维数组的方法是在一行中声明和定义变量,如下所示:
float (*data0)[224][3] = calloc(224, sizeof *data0);
有没有一种方法可以将其拆分为声明和定义以便我可以使用此方法,还是在头文件本身中同时执行这两种方法会更好?
我正在用 C 实现一个神经网络,我在多个地方定义了很多这样的数组。起初我不认为我以后会需要它们,这应该是 运行 在具有内存限制的嵌入式系统中,所以我将这些数组全部放在本地并在它们上使用 free
尽快。
但事实证明我需要它们来训练这个网络,所以我需要它们是全局的,以便它们在函数的多次迭代中保存它们的值。另外,我不知道我们将使用的系统会附加一个 64MB DRAM,所以内存限制不是什么大问题。
如果您在全局定义这些数组,则无需动态分配内存。与堆栈 space 不同,全局变量的大小没有实际限制。
因此假设您想要一个维度为 224、224 和 3 的 3D 数组,请按如下方式定义它:
float data0[224][224][3];
然后在头文件中声明为:
extern float data0[224][224][3];
此外,默认情况下全局变量是零初始化的,因此不需要显式初始化程序。
我有一堆多维数组分配在不同源文件的局部函数中,但我想使它们成为全局的。我正在考虑使用 extern
,根据 this question,我需要制作一个头文件,其中包含变量的 声明 ,然后是 在一个源文件中只定义那个变量一次。
但是,我用来生成多维数组的方法是在一行中声明和定义变量,如下所示:
float (*data0)[224][3] = calloc(224, sizeof *data0);
有没有一种方法可以将其拆分为声明和定义以便我可以使用此方法,还是在头文件本身中同时执行这两种方法会更好?
我正在用 C 实现一个神经网络,我在多个地方定义了很多这样的数组。起初我不认为我以后会需要它们,这应该是 运行 在具有内存限制的嵌入式系统中,所以我将这些数组全部放在本地并在它们上使用 free
尽快。
但事实证明我需要它们来训练这个网络,所以我需要它们是全局的,以便它们在函数的多次迭代中保存它们的值。另外,我不知道我们将使用的系统会附加一个 64MB DRAM,所以内存限制不是什么大问题。
如果您在全局定义这些数组,则无需动态分配内存。与堆栈 space 不同,全局变量的大小没有实际限制。
因此假设您想要一个维度为 224、224 和 3 的 3D 数组,请按如下方式定义它:
float data0[224][224][3];
然后在头文件中声明为:
extern float data0[224][224][3];
此外,默认情况下全局变量是零初始化的,因此不需要显式初始化程序。