一般來說,靜態(tài)全局變量只應(yīng)該定義在實(shí)現(xiàn)文件中,但有時由于一些特殊的目的,也可能定義在頭文件中。比如在有些標(biāo)準(zhǔn)庫的實(shí)現(xiàn)中,就用這種方法來初始化標(biāo)準(zhǔn)流cin, cout,或者在在tr1庫中,也用這種方法來定義占位符。每一個包含該頭文件的實(shí)現(xiàn)文件中都擁有該變量的一份拷貝,這些變量放在運(yùn)行體的data段或者bss段。
比如下面這個變量定義在一個頭文件中:
static int data[1024*1024];
我把這個文件同時包含在幾個cpp文件中,按我的理解,這個程序占用的內(nèi)存應(yīng)該顯著增大,但是,從實(shí)際運(yùn)行結(jié)果來看,并沒有變化,生成的exe文件大小也沒有變化,這是因?yàn)檠舆t加載呢,還是被編譯器優(yōu)化掉了?有沒有明白的達(dá)人解釋一下。