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