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

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

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

3天內不再提示

關鍵字volatile是什么?volatile關鍵字對編譯器優化的影響

Dp1040 ? 來源:strongerHuang ? 2023-11-03 11:47 ? 次閱讀

在我的技術交流群里,經常會看到大家討論一些“奇怪”的問題,其中有好幾次我都發現,是他們全局變量“惹的禍”,問題就是全局變量被優化導致的。

可能初學者不太關心編譯器優化的功能,但對于經驗豐富的工程師來說,掌握代碼優化是必備技能。

今天,我們講述的話題就是關于代碼優化中,關鍵字volatile在優化過程中起到的作用

關鍵字volatile是什么?

volatile是一個類型修飾符(type specifier)。

volatile的作用是作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值。

volatile變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。

---來自百度百科

volatile的定義,應該在(讀書)學習時都看過無數遍,但我相信絕大部分人都沒有深刻理解其中含義

當你真正編程、開發項目之后,你就會進一步理解其中含義。

volatile關鍵字對編譯器優化的影響

我們都知道編譯器有優化代碼的功能,我們常用的集成開發環境(Keil、 IAR等)都有優化選項。

473fd922-79e1-11ee-939d-92fbcf53809c.jpg

如果不使用關鍵字 volatile 申明變量,則編譯器可能會對變量的訪問并生成非預期的代碼或刪除預期的功能。

1、什么時候使用volatile?

常見使用volatile聲明的情況:

訪問內存映射外設。

在多個線程之間共享全局變量。

在中斷例程或信號處理程序中訪問全局變量。

比如,在STM32代碼中:


#define __O volatile /*!< Defines 'write only' permissions */#define?????__IO????volatile?????????????/*!

瀏覽代碼,你會發現,很多地方都使用了“__IO”,也就是volatile.

在跑系統的項目中,線程間共享的全局變量,建議都加上volatile關鍵字,這一點,很多人沒有在意。

2、不用volatile時可能出現的問題

如果未將變量用volatile聲明,則編譯器會假定其值不能在其定義的范圍之外進行修改。

因此,編譯器可能會執行不需要的優化。這可以通過多種方式表現出來:

在輪詢硬件時,代碼可能會陷入循環。

多線程代碼可能會表現出奇怪的行為。

優化可能會導致刪除實現故意時序延遲的代碼。

舉個例子,這是我自己寫一個延時函數:


void Delay(int Cnt){ int i;

while(Cnt--) { i++; for(i=0; i<10; i++); ?}}

你在不同優化等級情況下,延時時間可能會不一樣

同樣的代碼,你在Keil 和 IAR環境下編譯出來的延時時間也可能不一樣。

當然,更深入的理解就會牽涉到匯編代碼,編譯之后的匯編代碼會比較直觀的呈現差異。

本文轉載自strongerHuang

審核編輯:湯梓紅

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

    關注

    1

    文章

    1640

    瀏覽量

    49224
  • 關鍵字
    +關注

    關注

    0

    文章

    37

    瀏覽量

    6917
  • volatile
    +關注

    關注

    0

    文章

    45

    瀏覽量

    13047

原文標題:全局變量加/不加volatile的影響

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

收藏 人收藏

    評論

    相關推薦

    淺談SQL優化小技巧

    存儲在緩存中的數據; (3)未命中緩存后,MySQL通過關鍵字將SQL語句進行解析,并生成一顆對應的解析樹,MySQL解析將使用MySQL語法進行驗證和解析。 例如,驗證是否使用了錯誤的關鍵字,或者
    的頭像 發表于 12-25 09:59 ?534次閱讀

    Triton編譯器優化技巧

    在現代計算環境中,編譯器的性能對于軟件的運行效率至關重要。Triton 編譯器作為一個先進的編譯器框架,提供了一系列的優化技術,以確保生成的代碼既高效又適應不同的硬件架構。 1. 指令
    的頭像 發表于 12-25 09:09 ?296次閱讀

    Triton編譯器與其他編譯器的比較

    Triton編譯器與其他編譯器的比較主要體現在以下幾個方面: 一、定位與目標 Triton編譯器 : 定位:專注于深度學習中最核心、最耗時的張量運算的優化。 目標:提供一個高度抽象、靈
    的頭像 發表于 12-24 17:25 ?443次閱讀

    Triton編譯器功能介紹 Triton編譯器使用教程

    Triton 是一個開源的編譯器前端,它支持多種編程語言,包括 C、C++、Fortran 和 Ada。Triton 旨在提供一個可擴展和可定制的編譯器框架,允許開發者添加新的編程語言特性和優化技術
    的頭像 發表于 12-24 17:23 ?532次閱讀

    C語言關鍵字分別發生在哪個階段

    的第一個階段:預處理,對一些宏定義做替換。 第二個,const。 C語言中的 const 用于修飾只讀變量,表示變量本身不能修改。 這個關鍵字會在編譯的第二步起作用,也就是編譯。強行修改一個只讀變量,
    的頭像 發表于 11-24 10:31 ?215次閱讀

    Keil編譯器優化方法

    我們都知道,代碼是可以通過編譯器優化的,有的時候,為了提高運行速度或者減少代碼尺寸,會開啟優化選項。
    的頭像 發表于 10-23 16:35 ?748次閱讀
    Keil<b class='flag-5'>編譯器</b><b class='flag-5'>優化</b>方法

    C語言關鍵字--typedef

    C語言關鍵字使用方法學習指南!
    的頭像 發表于 10-07 12:44 ?317次閱讀

    使用邊緣AI和Sitara處理進行關鍵字檢測

    電子發燒友網站提供《使用邊緣AI和Sitara處理進行關鍵字檢測.pdf》資料免費下載
    發表于 09-02 11:30 ?0次下載
    使用邊緣AI和Sitara處理<b class='flag-5'>器</b>進行<b class='flag-5'>關鍵字</b>檢測

    快速掌握C語言關鍵字

    C語言中的32個關鍵字你知道多少個呢?根據關鍵字的作用分為四類:數據類型關鍵字、控制語句關鍵字、存儲類型關鍵字和其它
    的頭像 發表于 07-06 08:04 ?394次閱讀
    快速掌握C語言<b class='flag-5'>關鍵字</b>

    inline關鍵字優化導致此類函數被布局在flash內,怎么處理?

    == 0));} 由于uart.c多處調用這個函數,所以編譯器自作聰明地把它編譯成了非內聯函數(意圖是減少代碼占用?),且elf能找到uart_ll_is_tx_idle標號
    發表于 06-21 12:03

    IDF4.2.1的編譯器優化bug導致panic怎么處理?

    == 0) && (status.st_utx_out == 0));} 它是一個inline函數。我們都認為inline關鍵字,會告訴編譯器內聯此函數,于是它的代碼
    發表于 06-21 10:55

    簡單總結一下嵌入式C++中常見的錯誤形式

    對于 C++ 類,一些關鍵字只要寫在 .h 中就好,cpp 中就不用再加上了,比如 virtual、static 等關鍵字,如果在 cpp 中多寫,編譯器會報錯。
    的頭像 發表于 02-23 09:40 ?553次閱讀

    關鍵字搜索文件夾中某個TXT文件

    文件夾中隨時創造TXT文件,如何及時選出剛創造的文件?或關鍵字搜索出需要的TXT文件?
    發表于 02-06 15:22

    谷歌搜索引擎優化的各個方面和步驟

    谷歌搜索引擎是最受歡迎和廣泛使用的搜索引擎之一,為了使你的網站在谷歌上更好地排名并提高曝光度,你可以采取一些谷歌搜索引擎優化的步驟。 使用關鍵字研究工具,如Google AdWords關鍵字規劃工具
    的頭像 發表于 01-25 10:29 ?939次閱讀

    在NVM和本地\"內存中定義數組(靜態 /global /local)的\"關鍵字是什么?

    在 NVM 和本地\"內存中定義數組(靜態 /global /local)的\"關鍵字是什么? 還有與 32 位對齊的關鍵字怎么樣。
    發表于 01-25 07:52
    主站蜘蛛池模板: 99视频在线观看免费视频| 亚洲高清国产拍精品动图| 高H纯肉NP 弄潮NP男男| 国产婷婷色综合AV蜜臀AV| 久久亚洲人成国产精品| 肉动漫h黄动漫日本免费观看| 一本久道久久综合狠狠躁AV| 高清无码色大片中文| 免费看男人J放进女人J无遮掩| 欧美另类极品videosbest| 亚洲欧美日韩精品自拍 | 精品国产午夜肉伦伦影院| 狠狠色狠狠色综合曰曰| 青柠在线观看视频在线高清完整 | xxxx美国老师1819| 国产成人在线免费| 女仆乖H调教跪趴| 一本道亚洲区免费观看| 国产剧果冻传媒星空在线观看| 翘臀后进美女白嫩屁股视频| 中文无码熟妇人妻AV在线| 黄色三级视频网站| 亚在线观看免费视频入口| 国产AV无码成人黄网站免费| 欧美日韩1区| asian4you裸模| 美女网站免费久久久久久久| 涩涩免费视频软件| qvod伦理片| 快播h网站| 深喉吞精日本| 动漫美女被到爽了流| 国精一区二区AV在线观看网站| 色四房播播| 国产成A人片在线观看| 色婷婷我要去我去也| 成人在线观看免费视频| 日韩一卡二卡三卡四卡免费观在线| 亚洲电影第1页| 国产视频这里只有精品| 性做久久久久久久久浪潮|