成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C語言 volatile 關鍵字在編譯優化過程中有何作用

開發 后端
初學的讀者可能不怎么關心編譯器優化的功能,但對于經驗豐富的工程師來說,掌握代碼優化是必備技能。今天講述的話題就是關于代碼優化中,關鍵字volatile在優化過程中起到的作用。

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

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

一、關鍵字 volatile 是什么?

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

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

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

---來自百度百科

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

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

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

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

 

 

 

 

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

1.何時使用volatile?

常見使用volatile聲明的情況:

  • 訪問內存映射外設。
  • 在多個線程之間共享全局變量。
  • 在中斷例程或信號處理程序中訪問全局變量。

比如,在STM32代碼中:

  1. #define     __O     volatile             /*!< Defines 'write only' permissions */ 
  2. #define     __IO    volatile             /*!< Defines 'read / write' permissions */ 

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

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

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

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

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

  • 在輪詢硬件時,代碼可能會陷入循環。
  • 多線程代碼可能會表現出奇怪的行為。
  • 優化可能會導致刪除實現故意時序延遲的代碼。

舉例:

自己寫一個延時函數:

  1. void Delay(int Cnt) 
  2.   int i; 
  3.  
  4.   while(Cnt--) 
  5.   { 
  6.     i++; 
  7.     for(i=0; i<10; i++); 
  8.   } 

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

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

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

 

責任編輯:龐桂玉 來源: C語言與C++編程
相關推薦

2011-06-14 13:26:27

volatile

2011-06-21 09:50:51

volatile

2022-01-10 18:11:42

C語言應用技巧

2022-06-29 08:05:25

Volatile關鍵字類型

2015-11-10 16:10:22

C語言StaticConst

2025-06-13 08:00:00

Java并發編程volatile

2019-09-04 14:14:52

Java編程數據

2022-08-17 07:53:10

Volatile關鍵字原子性

2009-09-02 09:24:03

C# this關鍵字

2009-08-21 14:58:56

C# this關鍵字

2023-06-26 08:02:34

JSR重排序volatile

2009-06-29 18:14:23

Java多線程volatile關鍵字

2009-08-13 13:04:29

C# lock關鍵字

2009-08-06 17:52:23

C#增加that關鍵字

2009-08-13 17:44:34

C# using關鍵字

2009-08-21 14:47:59

C# base關鍵字

2009-08-26 15:16:29

C# lock關鍵字

2011-05-17 13:04:20

Cconst

2018-01-19 10:43:06

Java面試官volatile關鍵字

2020-07-17 20:15:03

架構JMMvolatile
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久影视 | 蜜桃黄网 | 日韩一区二区三区精品 | 综合精品| 三区在线观看 | 亚洲精品久久久久久一区二区 | 免费色网址| 中文字幕在线视频观看 | 国内自拍偷拍 | 国产欧美一区二区三区国产幕精品 | 麻豆久久久久久 | 亚洲毛片 | 女人精96xxx免费网站p | 国产精品久久久久久久久久久久久久 | 91国语清晰打电话对白 | 在线视频第一页 | 欧美激情在线一区二区三区 | 亚洲国产精品久久久 | 欧美日本在线 | 亚洲欧美v| 青青草一区二区 | www.99热.com| 日韩在线高清 | 91文字幕巨乱亚洲香蕉 | 黄色一级视频 | 国产成人精品亚洲日本在线观看 | 免费黄色a视频 | 一级片av | 黄色中文字幕 | 欧美大片一区 | 免费黄视频网站 | 国产精品99久久久久久久久久久久 | 丁香色婷婷 | 日韩1区| 美女视频三区 | 亚洲精品高清视频在线观看 | 欧美一级黄色片在线观看 | 亚洲国产偷 | 日韩欧美一区二区三区在线播放 | 午夜视频在线观看视频 | 久草青青 |