日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

详解volatile关键字

發(fā)布時(shí)間:2023/11/30 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解volatile关键字 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

volatile字面意思:易變的。在計(jì)算機(jī)里,是防止優(yōu)化的意思,然而是怎么防止優(yōu)化的呢?待我一一道來哦。

先看這樣一個(gè)例子:

<span style="font-size:18px;">#include<iostream> using namespace std; int main() {int num = 10;int *p = &num;*p = 20;cout<<num<<endl;getchar();return 0; }</span>結(jié)果是什么呢?


由于p取得是num的地址,即p指向num,然后*p即取出p指向的內(nèi)容,將它修改為20,所以結(jié)果輸出num也被修改為20.

我們?cè)倏匆粋€(gè)例子:

<span style="font-size:18px;">#include<iostream> using namespace std; int main() {const int num = 10;int *p = (int*)#*p = 20;cout<<num<<endl;getchar();return 0; }</span> 這里只是在int前加了const,將num設(shè)定為常量(在c語言中加const修飾變量叫常變量,c++中const修飾變量叫常量),所以無法修改num的值,結(jié)果如下:


這里我詳細(xì)說明一下它是怎么執(zhí)行的?調(diào)出內(nèi)存看一下吧:


這是num所在的位置。賦值為10.


此時(shí)p就指向num。

內(nèi)存里邊p指向的內(nèi)容確實(shí)改變了。但是我們看一下輸出的結(jié)果:(如果在linux下演示的話,將代碼編到test.c下,用命令gcc test.c -02 使優(yōu)化級(jí)別最高進(jìn)行測(cè)試)


為什么輸出的結(jié)果卻是10呢?p所指向的內(nèi)容確實(shí)是num,但是在這里*p改變了,num卻不受影響。。這個(gè)原因就在于const關(guān)鍵字。const將num這個(gè)變量修飾為常量,所以無法修改它,為了使常量不受破壞,就把它放在了寄存器中。以方便使用。又因?yàn)榧拇嫫魇遣痪幹返?#xff0c;所以取地址根本不受影響。說起寄存器,看一下下面這幅圖:(畫的不錯(cuò),網(wǎng)上摳下來的哈)


顯而易見,最上邊的是寄存器,是速度最快的,最下邊是內(nèi)存,是速度最慢的。那么問題來了,既然寄存器這么快,為什么不把變量都放在寄存器里呢。首先,學(xué)過計(jì)算機(jī)組成原理的同學(xué)都知道,寄存器造價(jià)高,空間小,可經(jīng)不起那樣的傷害。所以我們盡可能的把它們放在內(nèi)存中,內(nèi)存的空間大小可比寄存器的大多了。

為了解決上面的問題,我們引來了另一個(gè)關(guān)鍵字:volatile

volatile是這樣使用的。

#include<iostream> using namespace std; int main() {volatile const int num = 10;int *p = (int*)#*p = 20;cout<<num<<endl;getchar();return 0; }這樣,volatile會(huì)防止編譯器的優(yōu)化,保證內(nèi)存的可見性。也就是不將num放入寄存器,而是放在內(nèi)存中,這樣就可以找到它的地址,進(jìn)而修改它了。

結(jié)果是:



以上就是volatile的簡(jiǎn)單介紹,希望能對(duì)大家的認(rèn)識(shí)有所幫助哦,歡迎來訪~~

總結(jié)

以上是生活随笔為你收集整理的详解volatile关键字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。