成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

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

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

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

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

代碼示例:

int square(volatile int*PTR)

]{

int a,b

a=*PTR

b=*PTR

返回a*b

}

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

long square(volatile int*PTR)

{

int a

a=*PTR

return a*a

}

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

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

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

對(duì)于JVM級(jí)別,是為了防止編譯器重新排序

同時(shí),對(duì)于某些CPU,它們會(huì)通過緩存鎖或線程來解決緩存可見性

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

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