2011-03-11 40 views
1

我有一個字面上寫感謝的腳本一個巨大的數組。它基本上是一個轉換爲數組的圖像文件。常量與宏觀和存儲壽命

我可以限定主體作爲宏或放入在報頭一個const類型。如果我確實將它設置爲const,那麼內存使用壽命是多少?它是否持續整個計劃?它的使用範圍和功能一樣長嗎?將使用宏是一個更好的選擇?

+1

包含實際位圖本身有什麼錯誤? – reuscam 2011-03-11 17:29:11

+1

好了,你可以不包括C/C++代碼的位圖 - 除非你轉換bitmape代碼(這是他在做什麼) - 或添加位圖作爲一個資源文件,如果你在Win32 – nos 2011-03-11 17:33:08

+0

資源文件,從磁盤等打開它... – reuscam 2011-03-11 17:39:21

回答

9

我數組定義移動到一個源文件(可能是本身):

// bitmap.cpp 
char const my_bitmap[] = { 
    0x12, 0x34, 0x56, // lots of data here... 
}; 

然後寫只是有其外部聲明的標題:

//bitmap.h 
extern char const my_bitmap[]; 

這給所有代碼(包括標題)訪問數據,但保證你只有一個數據副本供每個人使用。它還避免了毫無意義地重新編譯代表位圖的代碼,每個文件需要訪問數據一次。

+0

內存影響呢?真的,我只需要使用它一次。 – NebulaFox 2011-03-11 18:52:26

+0

管理內存將主要由操作系統決定。假設需求分頁的虛擬內存,它會在使用時被分頁,並且在最近沒有被使用時被丟棄(確定「最近」的具體細節變化)。 – 2011-03-11 18:54:32

2

如果數組是在頭文件中定義,該陣列將擁有全球範圍內,只要申請持續,將住。

注意,如果包括頭部多次,你可能會得到鏈接錯誤,說明你有相同的符號/名稱的幾個地方。如果數組是靜態的,那麼在每個包含該頭文件的源文件中都會有該數組的副本。

如果你定義的數組作爲一個宏,它會根據活到您使用宏,你會得到數組的副本每一個地方,你使用的宏 - 聽起來並不像一個很好的解決方案除了數組非常小的簡單情況外。