我有一堆多維陣列,它們在不同源檔案的本地函式中分配,但我想讓它們成為全域的。我正在考慮使用extern并且根據這個問題,我需要制作一個頭檔案,其中包含我的變數的宣告,然后在一個源檔案中只定義一次該變數。
但是,我用來生成多維陣列的方法在一行中宣告和定義變數,如下所示:
float (*data0)[224][3] = calloc(224, sizeof *data0);
有沒有一種方法可以將其拆分為宣告和定義,以便我可以使用此方法,還是僅在頭檔案本身上執行這兩項操作會更好?
我正在用 C 語言實作一個神經網路,我在多個地方定義了很多這樣的陣列。起初我不認為我以后會需要它們,而且這應該在具有記憶體限制的嵌入式系統中運行,所以我將這些陣列全部free設為本地并盡快在它們上使用。
但事實證明,我需要它們來訓練這個網路,所以我需要它們是全域的,以便它們在函式的多次迭代中保存它們的值。另外,我不知道我們將使用的系統將連接一個 64MB DRAM,因此記憶體限制不是什么大問題。
uj5u.com熱心網友回復:
如果您全域定義這些陣列,則無需動態分配記憶體。與堆疊空間不同,全域變數的大小沒有實際限制。
因此,假設您想要一個維度為 224、224 和 3 的 3D 陣列,請按如下方式定義它:
float data0[224][224][3];
然后在頭檔案中將其宣告為:
extern float data0[224][224][3];
此外,全域變數默認為零初始化,因此不需要顯式初始化程式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/341513.html
