1、const:
const修飾的數(shù)據(jù)類型是指常類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓?只能在定義時(shí)進(jìn)行初始化賦值
2、 violate:**
volatile限定符,防止編譯器優(yōu)化對(duì)設(shè)備寄存器的訪問(多線程也能用到)。用volatile限定符修飾變量,就是告訴編譯器,即使在編譯時(shí)指定了優(yōu)化選項(xiàng),每次讀這個(gè)變量仍然要老老實(shí)實(shí)從內(nèi)存讀取,每次寫這個(gè)變量也仍然要老老實(shí)實(shí)寫回內(nèi)存,不能省略任何步驟。
編譯優(yōu)化問題:如果是普通的內(nèi)存單元,只要程序不去改寫它,它就不會(huì)變,可以先把內(nèi)存單元里的值讀到寄存器緩存起來,以后每次用到這個(gè)值就直接從寄存器讀取,這樣效率更高,我們知道讀寄存器遠(yuǎn)比讀內(nèi)存要快。另一方面,如果對(duì)一個(gè)普通的內(nèi)存單元連續(xù)做三次寫操作,只有最后一次的值會(huì)保存到內(nèi)存單元中,所以前兩次寫操作是多余的,可以優(yōu)化掉。訪問設(shè)備寄存器的代碼這樣優(yōu)化就錯(cuò)了,因?yàn)樵O(shè)備寄存器往往具有以下特性:
- 設(shè)備寄存器中的數(shù)據(jù)不需要改寫就可以自己發(fā)生變化,每次讀上來的值都可能不一樣。
- 連續(xù)多次向設(shè)備寄存器中寫數(shù)據(jù)并不是在做無用功,而是有特殊意義的
問題:無法阻止cache優(yōu)化,因?yàn)閏ache對(duì)程序員是透明的
3、static和extern
static聲明變量或標(biāo)識(shí)符為靜態(tài)的,其有效作用域是目標(biāo)文件,而全局變量的作用域是跨文件的,可以在多個(gè)目標(biāo)文件中起作用。在函數(shù)定義和變量定義前加static可以實(shí)現(xiàn)變量和函數(shù)的封裝。(防止其他目標(biāo)文件對(duì)其進(jìn)行引用、篡改);
extern可置于變量或者函數(shù)前,以表示變量或者函數(shù)的定義在別的文件中,提示編譯器遇到此變量或函數(shù)時(shí),在其它模塊中尋找其定義。函數(shù)聲明前可加可不加,但是變量前必須加