static關(guān)鍵字的內(nèi)存原理
- 分配在全局?jǐn)?shù)據(jù)區(qū)
- 編譯期初始化讶隐,默認(rèn)初始化為零
static在不同場(chǎng)景中的效用
目錄
- 成員變量
- 成員函數(shù)
- 全局變量
- 局部變量
- 普通函數(shù)
成員變量
- 根據(jù)其內(nèi)存性質(zhì)威始,我們知道這個(gè)變量是類本身的一個(gè)屬性返吻,記得是類而不是對(duì)象众羡,所以它對(duì)于所有實(shí)例化的對(duì)象而言是共享屬性田轧。此外玩讳,它不構(gòu)成對(duì)象的內(nèi)存空間备绽,所以sizeof(xxx)的值等于除靜態(tài)變量外所喲成員變量大小的總和;
- 定義和初始化同步進(jìn)行,可以不加static關(guān)鍵字占贫,聲明時(shí)不分配內(nèi)存空間;
- 功能屬性:用于實(shí)現(xiàn)對(duì)象間數(shù)據(jù)共享桃熄,主要針對(duì)對(duì)于與類本身高度耦合的數(shù)據(jù);
4 靜態(tài)數(shù)據(jù)成員常用作計(jì)數(shù)器,被對(duì)象的成員函數(shù)調(diào)用型奥,此時(shí)記得考慮包含靜態(tài)成員的構(gòu)造函數(shù)瞳收,應(yīng)該重寫拷貝構(gòu)造函數(shù);
成員函數(shù)
- 和靜態(tài)數(shù)據(jù)成員類似碉京,靜態(tài)函數(shù)也是屬于類本身,所以他所使用的變量不能是任意對(duì)象所擁有的螟深,比如不包含this指針(對(duì)象空間的初始地址)谐宙,對(duì)象的非靜態(tài)成員等;
2 語法規(guī)則:出現(xiàn)在類體外的函數(shù)定義不能指定關(guān)鍵字static;靜態(tài)成員函數(shù)因?yàn)槠渚幾g期屬性和沒有this的開銷,所以效率會(huì)更高;可以通過對(duì)象和類名調(diào)用靜態(tài)成員(權(quán)限允許的情況下)
3 因?yàn)閏onst成員函數(shù)本身會(huì)限制對(duì)對(duì)象屬性的修改包括this指針血崭,所以對(duì)于成員函數(shù)而言卧惜,const和static不能共存;
靜態(tài)全局變量
- 在全局?jǐn)?shù)據(jù)區(qū)分配(空間不會(huì)被釋放直至進(jìn)程結(jié)束)
- 可見性:本文件全局可見,其他文件不可見
靜態(tài)局部變量
- 和全局靜態(tài)變量一樣在全局?jǐn)?shù)據(jù)區(qū)分配
- 只會(huì)在聲明時(shí)初始化一次夹纫,除此之外保持上次被使用的值
- 作用域?yàn)榫植垦蚀桑遣粫?huì)被釋放直至程序運(yùn)行結(jié)束
靜態(tài)函數(shù)
只有一點(diǎn):僅當(dāng)前文件可見,避免不同文件中函數(shù)名的沖突
總結(jié)
static變量被分配在靜態(tài)內(nèi)存區(qū)舰讹,在編譯時(shí)分配空間并初始化茅姜,與動(dòng)態(tài)內(nèi)存區(qū)變量區(qū)分開來,能夠有效地構(gòu)建類型固有屬性月匣,在對(duì)象之間共享钻洒,節(jié)省程序動(dòng)態(tài)運(yùn)行開支,同時(shí)保持程序命名空間的獨(dú)立性