色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C語言深入理解系列之專一王子:volatile

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:胡薇 ? 2018-06-11 11:13 ? 次閱讀

每個變量和其名字一樣善變,有時候它善變是發(fā)自內心的,有時候是外部因素決定的,只有volatile變量才會表里如一,因此獲得了專一王子的美譽。

volatile字面意思是易揮發(fā)、易變化的意思,它修飾的變量表示該變量的值很容易由于外部的因素而發(fā)生改變,強烈要求編譯器要老老實實的在每次對變量進行訪問時去內存里讀取。

舉個生活中的栗子:

你明天 有一個朋友要過生日,今天把要送的禮物打包好了,一般情況下,我們明天起來不需要再次打開驗證一下里面的禮物是否存在,因為我們知道,只要禮物的外包裝沒有動過,里面的東西應該也沒有動過。其實編譯器和人一樣聰明,為了提高效率也會玩省事,做優(yōu)化。

如下面的例子:

編譯器掃描了代碼發(fā)現(xiàn)上面,第一行代碼將10賦給了整型變量a,之后a變量的值沒有再發(fā)生變化,在后面的第二行中,將a變量的值取出來賦給b,在第三行代碼里面將a變量的值賦給了c的時候,因為CPU訪問內存速度慢,編譯器為了提高效率,玩“省事”,直接將10賦給了c。

單從上面的代碼我們來看是沒有問題的,就如同從外包裝看生日禮物完好一樣。但是,如果上述代碼運行在多線程中,在一個線程上下文中沒有改變它的值,但是我們卻不能保證變量的值沒有被其他線程所改變,就好比是,生日禮物放在其他人那里保管,我們不敢100%的確定它里面的東西完好。當然這種數(shù)據(jù)不一致的機制不僅僅出現(xiàn)在多線程中,同樣在設備的狀態(tài)寄存器里也會存在。例如,網(wǎng)卡里的某狀態(tài)寄存器里的值是否為1表示是否有網(wǎng)絡數(shù)據(jù)到達,在當前時刻其值為1,不能代表下一時刻它的值還是1,它的值有外界決定,編譯器肯定不能在這種情況下玩“省事”,為了防止在類似的情況下編譯器玩省事,可以將這些變量聲明為volatile,這樣不管它的值有沒有變化,每次對其值進行訪問的時候,都會從內存里,寄存器了讀取,保證數(shù)據(jù)的一致、做到表里如一。

總結:

一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優(yōu)化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個例子:(1). 并行設備的硬件寄存器(如:狀態(tài)寄存器)(2). 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)(3). 多線程應用中被幾個任務共享的變量

(1). 一個參數(shù)既可以是const還可以是volatile嗎?解釋為什么。答:是的。一個例子是只讀的狀態(tài)寄存器。它是volatile因為它可能被意想不到地改變。它是const因為程序不應該試圖去修改它。(2). 一個指針可以是volatile 嗎?解釋為什么。答:是的。盡管這并不很常見。一個例子是當一個中服務子程序修該一個指向一個buffer的指針時。(3). 下面的函數(shù)有什么錯誤:

這段代碼的有個惡作劇。這段代碼的目的是用來返指針*ptr指向值的平方,但是,由于*ptr指向一個volatile型參數(shù),編譯器將產(chǎn)生類似下面的代碼:

由于*ptr的值可能被意想不到地該變,因此a和b可能是不同的。結果,這段代碼可能返不是你所期望的平方值!正確的代碼如下:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137433
  • volatile
    +關注

    關注

    0

    文章

    45

    瀏覽量

    13048

原文標題:專一的王子,C語言volatile關鍵字解析

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    深入理解Android

    深入理解Android
    發(fā)表于 08-20 15:30

    深入理解和實現(xiàn)RTOS_連載

    和trcohili的帖子。trochili rtos完全是作者興趣所在,且行且堅持,比沒有duo。深入理解和實現(xiàn)RTOS_連載1_RTOS的前生今世今天發(fā)布的是第篇,"RTOS的前生今世"
    發(fā)表于 05-30 01:02

    深入理解C語言比較有用的幾個資料

    這里有三個對深入理解C語言的資料,覺得不錯,分享
    發(fā)表于 08-07 21:37

    51單片機C語言講義(譚浩強)以及深入理解C指針

    本帖最后由 發(fā)燒友麒麟 于 2014-10-6 09:19 編輯 C語言講義(譚浩強)及深入理解C指針,自己在用的資料,覺得寫得挺好
    發(fā)表于 10-02 17:05

    專一王子,C語言volatile關鍵字解析

    每個變量和其名字樣善變,有時候它善變是發(fā)自內心的,有時候是外部因素決定的,只有volatile變量才會表里如,因此獲得了專一王子的美譽。
    發(fā)表于 06-11 08:26

    如何深入理解ES6函數(shù)

    深入理解ES6函數(shù)
    發(fā)表于 05-22 07:40

    深入理解STM32

    時鐘系統(tǒng)是處理器的核心,所以在學習STM32所有外設之前,認真學習時鐘系統(tǒng)是必要的,有助于深入理解STM32。下面是從網(wǎng)上找的個STM32時鐘框圖,比《STM32中文參考手冊》里面的是中途看起來清晰些:重要的時鐘:PLLCL
    發(fā)表于 08-12 07:46

    對棧的深入理解

    為什么要深入理解棧?做C語言開發(fā)如果棧設置不合理或者使用不對,棧就會溢出,溢出就會遇到無法預測亂飛現(xiàn)象。所以對棧的深入理解是非常重要的。注:動畫如果看不清楚可以電腦看更清晰啥是棧先來看
    發(fā)表于 02-15 07:01

    為什么要深入理解

    [導讀] 從這篇文章開始,將會不定期更新關于嵌入式C語言編程相關的個人認為比較重要的知識點,或者踩過的坑。為什么要深入理解棧?做C語言開發(fā)如
    發(fā)表于 02-15 06:09

    深入理解Android資源文件

    深入理解Android資源文件
    發(fā)表于 01-22 21:11 ?22次下載

    深入理解Android:卷I》

    深入理解Android:卷I》
    發(fā)表于 03-19 11:23 ?0次下載

    深入理解Android網(wǎng)絡編程

    深入理解Android網(wǎng)絡編程
    發(fā)表于 03-19 11:26 ?1次下載

    深入理解C指針(C/C++程序員進階必備,透徹理解指針與內存管理)pdf

    深入理解C指針
    發(fā)表于 03-21 09:42 ?119次下載

    STM32編程:是時候深入理解棧了<>

    為什么要深入理解棧?做C語言開發(fā)如果棧設置不合理或者使用不對,棧就會溢出,溢出就會遇到無法預測亂飛現(xiàn)象。所以對棧的深入理解是非常...
    發(fā)表于 01-26 17:55 ?2次下載
    STM32編程:是時候<b class='flag-5'>深入理解</b>棧了<<b class='flag-5'>一</b>>

    深入理解C語言:循環(huán)語句的應用與優(yōu)化技巧

    能讓你的代碼更加簡潔明了,還能顯著提升程序執(zhí)行效率。本文將詳細介紹C語言中的三種常見循環(huán)結構——while循環(huán)、for循環(huán)和do...while循環(huán),帶你深入理解
    的頭像 發(fā)表于 12-07 01:11 ?231次閱讀
    <b class='flag-5'>深入理解</b><b class='flag-5'>C</b><b class='flag-5'>語言</b>:循環(huán)語句的應用與優(yōu)化技巧
    主站蜘蛛池模板: 美女脱内衣裸身尿口露出来 | 人妻夜夜爽天天爽三区麻豆AV网站 | 青青草在线视频 | 全部免费特黄特色大片看片 | 快播萝莉影院 | 女人张开腿让男人桶爽免 | 后入内射国产一区二区 | av视频在线免播放观看 | 亚洲欧洲精品成人久久曰影片 | 外女思春台湾三级 | 久久99r66热这里有精品 | 亚洲国产成人久久一区www妖精 | 欧美人妇无码精品久久 | 理论片午午伦夜理片久久 | 亚洲国产日韩欧美在线a乱码 | 国产精品热久久高潮AV袁孑怡 | 小妇人电影免费完整观看2021 | 草民电影网午夜伦理电影网 | 露露的性战k8经典 | 日本一本二本三区免费免费高清 | 国产精品永久免费视频 | 四虎永久免费网址 | 99re久久热在线播放快 | 久久国产加勒比精品无码 | 亚洲中文热码在线视频 | 蜜桃成熟时2在线观看完整版hd | 国产精品系列在线一区 | 国内精品国内自产视频 | 久草视频在线观看免费4 | 精品一成人岛国片在线观看 | 国产乱子影视频上线免费观看 | 亚洲AV美女成人网站P站 | 色婷婷亚洲精品天天综合影院 | 熟女人妻AV五十路六十路 | 99re6在线视频国产精品欧美 | 成人国产亚洲欧美成人综合网 | 学生小泬无遮挡女HD | 秋霞电影网午夜免费鲁丝片 | 亚洲高清视频一区 | 欧美亚洲国产手机在线有码 | 袖珍人与大黑人性视频 |