哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

3天內不再提示

關鍵字volatile是什么?volatile關鍵字對編譯器優(yōu)化的影響

Dp1040 ? 來源:strongerHuang ? 2023-11-03 11:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

關鍵字volatile是什么?

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

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

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

---來自百度百科

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

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

volatile關鍵字對編譯器優(yōu)化的影響

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

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

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

1、什么時候使用volatile?

常見使用volatile聲明的情況:

訪問內存映射外設。

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

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

比如,在STM32代碼中:


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

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

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

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

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

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

在輪詢硬件時,代碼可能會陷入循環(huán)。

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

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

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


void Delay(int Cnt){ int i;

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

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

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

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

本文轉載自strongerHuang

審核編輯:湯梓紅

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

    關注

    1

    文章

    1672

    瀏覽量

    51895
  • 關鍵字
    +關注

    關注

    0

    文章

    37

    瀏覽量

    7242
  • volatile
    +關注

    關注

    0

    文章

    46

    瀏覽量

    13792

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    volatile的修飾符

    ; }   #endif volatile 告訴編譯器i是隨時可能發(fā)生變化的,每次使用它的時候必須從i的地址中讀取,因而編譯器生成的可執(zhí)行碼會重新從i的地址讀取數據放在k中。 而優(yōu)化
    發(fā)表于 01-06 07:39

    關鍵字volatile的含意

    關鍵字volatile有什么含意? 一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,
    發(fā)表于 12-23 06:33

    interrupt關鍵字使用

    中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發(fā)商提供一種擴展—讓標準C支持中斷。具代表事實是,產生了一個新的關鍵字__interrupt。下面的代碼就使用了__interrupt關鍵字去定義
    發(fā)表于 12-22 09:36

    Temu跨境電商按關鍵字搜索Temu商品API的應用及接口請求示例

    限于以下幾個方面: 用戶搜索商品:當用戶在Temu平臺上輸入關鍵字搜索商品時,API會根據輸入的關鍵字返回與之相關的商品列表,幫助用戶快速找到感興趣的商品。 數據分析與市場調研:商家可以利用該API進行關鍵詞搜索數據的分析,了解
    的頭像 發(fā)表于 11-29 15:08 ?676次閱讀

    哪些場合會用到volatile關鍵字?

    ,使用volatile關鍵字也許能減少代碼bug率。 2.寄存單片機開發(fā),寄存添加volatile
    發(fā)表于 11-25 08:19

    什么是??volatile

    volatile是一個類型修飾符(type specifier)。 volatile的作用是作為指令關鍵字,確保本條指令不會因編譯器優(yōu)化
    發(fā)表于 11-25 06:36

    天眼查平臺關鍵字搜索企業(yè)數據API接口技術指南

    ? 一、接口概述 天眼查提供的企業(yè)搜索API接口,支持通過關鍵字查詢企業(yè)工商信息、經營狀態(tài)等核心數據。該接口采用RESTful架構,返回JSON格式數據。 二、接口認證 調用需使用API密鑰認證
    的頭像 發(fā)表于 11-21 11:48 ?877次閱讀
    天眼查平臺<b class='flag-5'>關鍵字</b>搜索企業(yè)數據API接口技術指南

    通過優(yōu)化代碼來提高MCU運行效率

    調用開銷。 使用 const 和 volatile 關鍵字,幫助編譯器進行更好的優(yōu)化。 數據類型選擇 使用與MCU字長匹配的數據類型。在32位MCU上,int 和 uint32_t
    發(fā)表于 11-12 08:21

    1688平臺關鍵字搜索商品API接口技術實踐指南

    /com.alibaba.product/alibaba.product.search/ 必備參數: { "keyword": "手機", // 搜索關鍵字 "pageNo": 1, // 頁碼 "pageSize": 20, // 每頁數量 "access_token": "xxx" // 認證令牌 } 二、響應
    的頭像 發(fā)表于 11-11 14:22 ?712次閱讀
    1688平臺<b class='flag-5'>關鍵字</b>搜索商品API接口技術實踐指南

    亞馬遜平臺根據關鍵字搜索商品API接口

    ? ?在電商開發(fā)中,集成亞馬遜平臺的商品搜索功能是常見需求。通過亞馬遜的Product Advertising API(PAAPI),開發(fā)者可以根據關鍵字高效檢索商品信息。本技術帖將逐步介紹如何調用
    的頭像 發(fā)表于 11-05 15:00 ?506次閱讀
    亞馬遜平臺根據<b class='flag-5'>關鍵字</b>搜索商品API接口

    簡單的內聯匯編介紹

    __”。 __volatile__或 volatile 是可選的。如果添加了該關鍵字,則要求編譯器對后續(xù)括號內添加的匯編程序不進行任何優(yōu)化
    發(fā)表于 10-30 08:04

    亞馬遜 SP-API 深度開發(fā):關鍵字搜索接口的購物意圖挖掘與合規(guī)競品分析

    本文深度解析亞馬遜SP-API關鍵字搜索接口的合規(guī)調用與商業(yè)應用,涵蓋意圖識別、競品分析、性能優(yōu)化全鏈路。通過COSMO算法解析用戶購物意圖,結合合規(guī)技術方案提升關鍵詞轉化率,助力賣家實現數據驅動決策,安全高效
    的頭像 發(fā)表于 10-17 14:59 ?685次閱讀

    阿里巴巴開放平臺關鍵字搜索商品接口實戰(zhàn)詳解:OAuth2.0 認證落地 + 檢索效率優(yōu)化(附避坑代碼)

    在 B2B 電商數據對接中,阿里巴巴開放平臺的關鍵字搜索商品接口(alibaba.aliindex.search)是獲取批發(fā)商品、供應商數據的核心通道。但多數開發(fā)者會卡在OAuth2.0 認證斷連
    的頭像 發(fā)表于 09-16 16:26 ?1085次閱讀

    阿里巴巴國際站關鍵字搜索 API 實戰(zhàn):從多條件篩選到商品列表高效獲客

    ??在跨境電商數據采集場景中,通過關鍵字精準搜索商品列表是基礎且核心的需求。本文將聚焦阿里巴巴國際站的關鍵字搜索接口,詳細介紹如何構建多條件搜索請求、處理分頁數據、解析商品列表信息,并提供可直接復用的 Python 實現方案,幫助開發(fā)者快速搭建穩(wěn)定高效的商品搜索功能。
    的頭像 發(fā)表于 08-20 09:22 ?1144次閱讀
    阿里巴巴國際站<b class='flag-5'>關鍵字</b>搜索 API 實戰(zhàn):從多條件篩選到商品列表高效獲客

    micro 關鍵字搜索全覆蓋商品,并通過 API 接口提供實時數據

    micro 關鍵字搜索全覆蓋商品”并通過 API 接口提供實時數據
    的頭像 發(fā)表于 07-13 10:13 ?986次閱讀
    元氏县| 芮城县| 蕉岭县| 荔浦县| 武冈市| 昆山市| 拜城县| 南部县| 信丰县| 屯留县| 石阡县| 遂川县| 房产| 达州市| 龙口市| 禄劝| 益阳市| 武安市| 孝感市| 中宁县| 常熟市| 兴义市| 卢龙县| 开封市| 独山县| 准格尔旗| 红原县| 汾阳市| 枝江市| 芷江| 临安市| 佛冈县| 米林县| 大同市| 涡阳县| 桑植县| 麻江县| 民勤县| 壶关县| 乌兰浩特市| 新昌县|