const
const是代表乙個不能改變的值的
volatile
代表變數是乙個可能被cpu指令之外的地方改變的
e.g.
#include
int main()
int i = 10;
i = i+20;
i = i+30;
printf("%d\n",i);
return 0;
}如果是這樣寫的**,那麼編譯器會覺得你很智障,它會自動把你的**進行優化,它會
優化成i= i+50;因為cpu通過電路來控制記憶體,但是如果有塊記憶體,有外部裝置也可以對它進行修改
如下圖**:
#include
int main()
這段組合語言看起來非常複雜,經過優化的話,就可以變成這樣
_asm
但是對於cpu來講:所有的計算工作都是在暫存器裡面完成的,不能直接對記憶體的數進行運算的,它只能把記憶體裡面的數拿到 暫存器裡面算完,在退回去記憶體,它不能直接在記憶體裡面算的
register int i;//變數i不是在記憶體裡面,變數i就是在cpu的暫存器裡面,
那麼這就更加優化了
-asm
mov eax, 100
add eax, 50
add eax, 20
}但是regist是建議型的命令,而不是命令型的指令
建議型:因為對於c語言來講,暫存器是有限的,萬一沒有暫存器可用了,那麼它就會忽略這些優化,但是有暫存器的話就一定會對你的**進行優化。
C語言的const型別限定符
我們通常用型別和儲存類別來描述乙個變數。c90還增加了兩個屬性 恆常性 constancy 和易變性 volatility 這兩個屬性分別用關鍵字const和volatile來宣告,以這兩關鍵字建立的型別是限定型別。c99標準新增了第3個限定符 restrict,用於提高編譯器優化。c11新增了第四...
C語言的 Atomic型別限定符 C11
併發程式設計把程式執行分成可以同時執行的多個執行緒。這程式設計帶來了新的挑戰,包括如何管理訪問相同資料的不同執行緒。c11通過包含可選的標頭檔案stdatomic.h和threads.h,提供了一些可選的 不是必須實現的 管理方法。值得注意的是,要通過各種紅函式類訪問原子型別。當乙個執行緒對乙個原子...
C儲存型別和型別限定符
c儲存型別和型別限定符 劉愛貴 aiguille.liu c儲存類分為兩類 自動儲存類 automatic 和靜態儲存類 static 宣告物件時使用的儲存類說明符以及宣告的上下文共同決定了物件的儲存類。自動儲存類物件對於乙個程式塊來說是區域性的,在退出程式塊時該物件將消失。1 如果沒有使用儲存類說...