restrict 和 volatile 的區別

2021-08-22 18:00:12 字數 547 閱讀 6715

編譯器優化常用的方法是:將記憶體變數快取到暫存器。

restrict 和 volatile 都是c語言中關於編譯器優化常用關鍵字

用來做優化的。

只能用於約束和限定指標,並表明指標是訪問乙個資料物件的唯一且初始方式。即它告訴編譯器,所有修改該指標所指向記憶體中內容的操作都必須通過該指標進行修改,而不能通過其他途徑。

這樣的好處是:能幫助編譯器進行更好的優化**,生成更有效率的彙編**。

舉例:

用來防止優化。

易變的,因為訪問暫存器要比訪問記憶體單元快的多,所以編譯器一般都會作減少訪問記憶體的優化,但有可能會讀髒資料。

當要求使用volatile宣告變數值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料,編譯器對訪問該變數的**就不再進行優化,從而可以提供對特殊位址的穩定訪問。

如果不使用volatile,則編譯器將對所宣告的語句進行優化。

關鍵字volatile和restrict

一 什麼是volatile?什麼是編譯器優化 volatile是乙個型別修飾符,它的主要作用是防止編譯器進行優化。那麼什麼是編譯器優化呢,我們看兩個個例子 例1 x 0x04 x 0x06 x 0x08 對於硬體來說這是3條指令,依次執行,但是如果讓編譯器進行編譯,則它會忽略前面兩條語句,直接得到 ...

TextInput的restrict屬性驗證控制項

restrict 用法 textfield.restrict 此處為可輸入的內容 field.restrict 此處為禁止輸入的內容 restrict屬性支援一些類似正規表示式的樣式 field.restrict a za z 只允許大小字母 field.restrict a za z 只允許字母和...

Linux驅動中的outb 與volatile

在linux的驅動程式中,都會使用大量的outb outw inb inw等等巨集來訪問硬體或暫存器。這些巨集的定義都在相應處理器體系下的include asm目錄下的io.h中定義。追究下去,這些巨集最終就是乙個volatile變數的的賦值 define arch putb v,a volatil...