解讀關鍵字volatile C語言面試題分析之一 - 程序員學院
文章推薦指數: 80 %
解讀關鍵字volatile C語言面試題分析之一,volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如作業系統硬 ...
解讀關鍵字volatileC語言面試題分析之一
2021-06-2003:24:28字數1353閱讀9188
volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如:作業系統、硬體或者其它執行緒等。
遇到這個關鍵字宣告的變數,編譯器對訪問該變數的**就不再進行優化,從而可以提供對特殊地址的穩定訪問。
inti=5;
inta=i;
intb=i;
編譯器發現兩次從i讀資料的**之間,並沒有對i進行過操作,它會自動把上次讀的資料放在b中,而不是重新從i裡面讀;
1.多執行緒應用中被幾個任務共享的變數;
2.一箇中斷服務子程式中會訪問到的非自動變數;
3.並行裝置的硬體暫存器(如:狀態暫存器);
嵌入式系統程式設計師經常同硬體、中斷、rtos等等打交道,所用會經常要求定義為volatile型別的變數。
volatileintncount;
當要求使用volatile宣告的變數的值的時候,系統總是重新從它所在的記憶體讀取資料,即使它前面的指令剛剛從該處讀取過資料。
而且讀取的資料立刻被儲存。
1).一個引數既可以是const還可以是volatile嗎?解釋為什麼。
2).一個指標可以是volatile嗎?解釋為什麼。
3).下面的函式有什麼錯誤:
intsquare(volatileint*ptr)
下面是答案:
1).可以是。
例如對於只讀的狀態暫存器而言,如果它僅僅是volatile型別,那麼它還是可能被意想不到的改變。
但它還是const的時候,程式就不應該試圖去修改它
2).可以是的。
儘管這種情況並不常見,但它還是可以。
一個例子就是:
當一箇中斷服務子程式企圖去修改一個指向一個buffer指標的時候。
3).這段**可能有點惡作劇的味道。
但它很好說明volatile型別引數的含義和作用。
這段**的目的是用來返指標*ptr所指向的值的平方,
但是,由於*ptr指向一個volatile型引數,編譯器將產生類似下面的**:
intsquare(volatileint*ptr)
由於*ptr的值可能被意想不到地該變,因此a和b可能是不同的。
結果,這段**可能返不
是你所期望的平方值!正確的**如下:
longsquare(volatileint*ptr)
1.使用volatile關鍵字修飾的變數,可以避免編譯器優化;
2.使用volatile關鍵字修飾的變數,每次都是重新讀取記憶體中的值,而不是使用儲存在暫存器裡的值了;
3.編譯器優化的做法是:
inti=5;
inta=i;
intb=i;
編譯器發現兩次從i讀資料的**之間,並沒有對i進行過操作,它會自動把上次讀的資料放在b中,而不是重新從i裡面讀。
相關推薦
簡單思維題poj1852Ants
C理解泛型
procdevicesawk
解讀關鍵字volatileC語言面試題分析之一
Ambari安裝
相關推薦
簡單思維題poj1852Ants
C理解泛型
procdevicesawk
解讀關鍵字volatileC語言面試題分析之一
Ambari安裝
相關閱讀
簡單思維題poj1852Ants
C理解泛型
procdevicesawk
解讀關鍵字volatileC語言面試題分析之一
Ambari安裝
在什麼情況下應當宣告虛擬函式
topic
科技
教育
python
社會
linux
數碼
java
c++
遊戲
演算法
健康
資料庫
文化
mysql
汽車
娛樂
科學
財經
資料結構
C語言
職場
php
oracle
C
作業系統
c#
工作
體育
網路
sql
延伸文章資訊
- 1嵌入式的面試題 - 立你斯學習記錄
在定義常量時,為什麼推薦使用const,而不是#define。 20、C語言的volatile的含義是什麼。使用時會對編譯器 ...
- 2C++常见面试题(11)——volatile_哎呦 - CSDN博客
本文主要介绍在C/C++语言中,volatile关键字的相关内容。1 概述1.1 why volatilevolatile 关键词,最早出现于19世纪70年代, ...
- 3volatile关键字有什么作用- C语言面试宝典 - 黑马程序员教程
黑马程序员教程前端面试宝典模块专注提供各类C语言开发面试题及答案,致力收集C语言 ... C/C++ Volatile变量,与非Volatile变量之间的操作,是可能被编译器交换顺序的。
- 4面试点:解读关键字volatile(C语言面试题分析之一)
volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问 ...
- 5解讀關鍵字volatile C語言面試題分析之一 - 程序員學院
解讀關鍵字volatile C語言面試題分析之一,volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素更改,比如作業系統硬 ...