暫存器變數:
它是被設計用來修飾被不同執行緒訪問和修改的變數
。如果沒有volatile,基本上會導致這樣的結果:要麼無法編寫多執行緒程式,要麼編譯器失去大量優化的機會。
volatile的作用: 作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值.
簡單地說就是防止編譯器對**進行優化.比如如下程式
推薦乙個定義為volatile的變數是說這變數可能會被意想不到地改變,這樣,編譯器就不會去假設這個變數的值了。精確地說就是,優化器在用到這個變數時必須每次都小心地重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份:
volatile變數的幾個例子:
1). 並行裝置的硬體暫存器(如:狀態暫存器)
2). 乙個中斷服務子程式中會訪問到的非自動變數(non-automatic variables)
3). 多執行緒應用中被幾個任務共享的變數
1). 乙個引數既可以是const還可以是volatile嗎?解釋為什麼。
2). 乙個指標可以是volatile 嗎?解釋為什麼。
3). 下面的函式被用來計算某個整數的平方,它能實現預期設計目標嗎?如果不能,試回答存在什麼問題:
int square(volatile int *ptr)
下面是答案:
1). 是的。乙個例子是唯讀的狀態暫存器。它是volatile因為它可能被意想不到地改變。它是const因為程式不應該試圖去修改它。
2). 是的。儘管這並不很常見。乙個例子是當乙個中斷服務子程式修改乙個指向乙個buffer的指標時。
3). 這段**是個惡作劇。這段**的目的是用來返指標*ptr指向值的平方,但是,由於*ptr指向乙個volatile型引數,編譯器將產生類似下面的**:
int square(volatile int *ptr)
由於*ptr的值可能在兩次取值語句之間發生改變,因此a和b可能是不同的。結果,這段**可能返不是你所期望的平方值!正確的**如下:
long square(volatile int *ptr)
int volatile nvint;
>>>>;當要求使用volatile 宣告的變數的值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料。而且讀取的資料立刻被儲存。
例如:volatile int i=10;
int a = i;
...//其他**,並未明確告訴編譯器,對i進行過操作
int b = i;
>>>>volatile 指出 i是隨時可能發生變化的,每次使用它的時候必須從i的位址中讀取,因而編譯器生成的彙編**會重新從i的位址讀取資料放在b中。而優化做法是,由於編譯器發現兩次從i讀資料的**之間的**沒有對i進行過操作,它會自動把上次讀的資料放在b中。而不是重新從i裡面讀。這樣一來,如果i是乙個暫存器變數或者表示乙個埠資料就容易出錯,所以說volatile可以保證對特殊位址的穩定訪問。
暫存器變數的定義形式是:
register 型別識別符號 變數名
中斷服務程式:處理器處理「急件」,可理解為是一種服務,是通過執行事先編好的某個特定的程式來完成的,這種處理「急件」的程式被稱為——中斷服務程式。
static
函式體內 static 變數的作用範圍為該函式體,不同於 auto 變數,該變數的記憶體只被分配一次,
因此其值在下次呼叫時仍維持上次的值;
(2)在模組內的 static 全域性變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問;
(3)在模組內的 static 函式只可被這一模組內的其它函式呼叫,這個函式的使用範圍被限制在宣告
它的模組內;
(4)在類中的 static 成員變數屬於整個類所擁有,對類的所有物件只有乙份拷貝;
(5)在類中的 static 成員函式屬於整個類所擁有,這個函式不接收 this 指標,因而只能訪問類的static 成員變數。
面試題 PHP面試題
建議 比如是系統配置,缺少了無法執行,自然使用 require 如果某一段程式少了,只是少了統計 訪問的,不是必不可少的。可以使用 include 而加不加 once 就是效率上的區別,雖然系統會幫你考慮只包含一次,但系統的判斷會降低效率,因此,更應該在開發之初,把目錄結構調整高好,盡量不使用 on...
面試題 騰訊2012面試題
問題描述 例如手機朋友網有n個伺服器,為了方便使用者的訪問會在伺服器上快取資料,因此使用者每次訪問的時候最好能保持同一臺伺服器。已有的做法是根據serveripindex qqnum n 得到請求的伺服器,這種方法很方便將使用者分到不同的伺服器上去。但是如果一台伺服器死掉了,那麼n就變為了n 1,那...
面試題總結 html面試題)
附上鏈結 doctype 的作用是什麼?宣告一般位於文件的第一行,它的作用主要是告訴瀏覽器以什麼樣的模式來解析文件。一般指定了之後會以標準模式來 進行文件解析,否則就以相容模式進行解析。在標準模式下,瀏覽器的解析規則都是按照最新的標準進行解析的。而在相容模式下,瀏 覽器會以向後相容的方式來模擬老式瀏...