在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

    文章

    1657

    瀏覽量

    49982
  • 關鍵字
    +關注

    關注

    0

    文章

    37

    瀏覽量

    7042
  • volatile
    +關注

    關注

    0

    文章

    46

    瀏覽量

    13299

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    單片機編程關鍵字volatile

    volatile 修飾的變量是說這變量可能會被意想不到地改變。通常對于程序員而言,單片機 中用的就算常見了volatile 是易變的,不穩定的意思。其實對于很多人來說,根本沒見過這個關鍵字,不 知道
    發表于 04-02 13:47 ?2次下載

    帶你在單片機編程中熟練使用const(可下載)

    為常量、常數等我們一看到 const 關鍵字馬上就想到了常量。這是不精確的,精確來說應該是只讀變量其 值在編譯時不能被使用,因為編譯器編譯時不知道其存儲的內容那么
    發表于 04-01 14:18 ?1次下載

    淺談SQL優化小技巧

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

    Triton編譯器如何提升編程效率

    在現代軟件開發中,編譯器扮演著至關重要的角色。它們不僅將高級語言代碼轉換為機器可執行的代碼,還通過各種優化技術提升程序的性能。Triton 編譯器作為一種先進的編譯器,通過多種方式提升
    的頭像 發表于 12-25 09:12 ?708次閱讀

    Triton編譯器優化技巧

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

    Triton編譯器在機器學習中的應用

    1. Triton編譯器概述 Triton編譯器是NVIDIA Triton推理服務平臺的一部分,它負責將深度學習模型轉換為優化的格式,以便在NVIDIA GPU上高效運行。Triton編譯器
    的頭像 發表于 12-24 18:13 ?917次閱讀

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

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

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

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

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

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

    C7000優化C/C++編譯器

    電子發燒友網站提供《C7000優化C/C++編譯器.pdf》資料免費下載
    發表于 10-30 09:45 ?0次下載
    C7000<b class='flag-5'>優化</b>C/C++<b class='flag-5'>編譯器</b>

    Keil編譯器優化方法

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

    C語言關鍵字--typedef

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

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

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

    typedef struct和直接struct的區別

    在C語言中, typedef 和 struct 是兩種不同的關鍵字,它們在定義和使用上有著明顯的區別。 typedef struct 和直接 struct 在 C 語言中用于定義結構體類型,但它們在
    的頭像 發表于 08-20 10:58 ?3555次閱讀

    快速掌握C語言關鍵字

    C語言中的32個關鍵字你知道多少個呢?根據關鍵字的作用分為四類:數據類型關鍵字、控制語句關鍵字、存儲類型關鍵字和其它
    的頭像 發表于 07-06 08:04 ?704次閱讀
    快速掌握C語言<b class='flag-5'>關鍵字</b>
    主站蜘蛛池模板: 99久久久免费精品免费 | 午夜性爽视频男人的天堂在线 | 琪琪午夜伦埋大全影院 | 边摸边吃奶边做视频叫床韩剧 | 丁香花在线观看免费观看 | 久久99国产精品免费观看 | 日韩一级精品视频在线观看 | 亚洲精品国产自在久久出水 | 婷婷爱五月天 | 欧美一区二区三区男人的天堂 | 国产亚洲3p一区二区三区 | 国产色爽女 | 亚洲已满18点击进入在线观看 | 午夜国产精品视频 | 亚洲第一视频 | 精品新一区二区三区四区 | 综合激情五月婷婷 | 操美女网址| 一区二区三区四区在线不卡高清 | 天天摸天天碰天天碰 | 国产免费爽爽视频免费可以看 | 欧美hh| 婷婷色在线 | 在线视频网址 | 国产三级中文字幕 | 国产综合免费视频 | 男人j进女人j的视频一进一出 | 美女露出扒开尿口让男人桶 | 我不卡午夜 | 亚洲综合狠狠 | re久久 | 在线免费视频手机版 | 一级毛片真人免费播放视频 | 操他射他影院 | 在线看片一区 | 一本大道加勒比久久 | 色婷婷一区 | 亚洲一区二区三区高清 | 青青青青久久精品国产h | 婷婷 综合网站 | 天天躁狠狠躁夜躁2021 |