卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

c語言 volatile關(guān)鍵字 C語言中volatile關(guān)鍵字的用法是什么?

C語言中volatile關(guān)鍵字的用法是什么?Volatile提醒編譯器,它后面定義的變量隨時可能發(fā)生變化,因此每次編譯的程序需要存儲或讀取變量時,它都會告訴編譯器直接從變量內(nèi)存地址讀取數(shù)據(jù),而不必優(yōu)化

C語言中volatile關(guān)鍵字的用法是什么?

Volatile提醒編譯器,它后面定義的變量隨時可能發(fā)生變化,因此每次編譯的程序需要存儲或讀取變量時,它都會告訴編譯器直接從變量內(nèi)存地址讀取數(shù)據(jù),而不必優(yōu)化變量,從而提供對特殊地址的穩(wěn)定訪問。。如果編譯器暫時無法讀取變量的值,那么它將與存儲在其他寄存器中的值不一致。

代碼示例:

int square(volatile int*PTR)

]{

int a,b

a=*PTR

b=*PTR

返回a*b

}

由于*PTR的值可能會意外更改,因此a和b可能不同。因此,此代碼可能不是您期望的正方形!正確的代碼如下:

long square(volatile int*PTR)

{

int a

a=*PTR

return a*a

}

]注意:頻繁使用volatile可能會增加代碼大小,降低性能,所以合理使用volatile。

volatile關(guān)鍵字在Java中有什么作用?

Volatile是為了防止指令重新排序以確??梢娦?/p>

對于JVM級別,是為了防止編譯器重新排序

同時,對于某些CPU,它們會通過緩存鎖或線程來解決緩存可見性

但是,目前很多CPU已經(jīng)過優(yōu)化,由于cache一致性MESI會帶來性能開銷,因此采用storebuffer機制進行異步處理,這種機制會導(dǎo)致指令的無序執(zhí)行。這會導(dǎo)致可見性問題。

然后volatile將在CPU級別增加內(nèi)存屏障,以解決由CPU無序執(zhí)行引起的可見性問題