亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言關鍵字auto與register的深入理解

2020-01-26 16:01:28
字體:
來源:轉載
供稿:網友

關鍵字概述
很多朋友看到這兒可能會有疑問,往往其它講C語言的書籍都是從HelloWorld,數據類型開始C語言學習的,為什么我們要從C語言的關鍵字開始呢?關于這點,我有兩點需要說明:
本章節面向的讀者對象是有一定的C語言基礎知識的朋友(至少應該學習過大學里的C語言程序設計等類似的課程)
本章節結合了作者多年嵌入式工作、研究、教學經驗而作,由計算機底層硬件到上層軟件設計融會貫通,中間有大量的深入淺出的示例

在我對C語言進行培訓的時候,往往就是從C語言的關鍵字入手,因為C語言的關鍵字蘊含了C語言的全部的詞匯,囊括了C語言里大量知識要點,從C語言關鍵字開刀,首先可以對你之前所學知識進行復習,其次,切磋一下和作者有什么不同的見解,廢話少說,讓我們從關鍵字開始。
關鍵字,又叫保留字,是編譯器能識別的特殊單詞,每種計算機語言都會有其特定的關鍵字,C語言中有32位關鍵字。
問:為什么要有關鍵字?
答:關鍵字是程序設計中代碼必須包含的部分,編譯器在編譯C代碼的時候,必然要將C代碼進行斷句,將代碼分割成不同部分,將這些部分分別進行解析和編譯。
int a = 10;  int是關鍵字,編譯器看到它出現,會將它后面的字符作為整型變量名來處理。
也就是說,關鍵字是編譯器能認識的特殊字符串符號。
關鍵字的數量是由編譯器來決定的,關鍵字大小寫敏感性也和編譯器有關。如果關鍵字寫錯,那么在代碼的解析過程中,編譯器就會報錯:符號不能識別或符號不能被解析。
每個關鍵字有著不同的意義,用來告知編譯器編程者的目的。

關鍵字分類
32個關鍵字每個都有不同的意義,大體上根據其意義可以分為以下幾類(下劃線表示不同分類中有交集):
1)非常見:auto、register、volatile、goto
2)存儲相關:const、extern、register、volatile、static、auto、signed、unsigned
3)數據類型:char、short、int、float、long、double、struct、union、enum、void
4)邏輯控制:if、else、for、while、do、break、continue、return、default、switch、case、goto
5)特殊用途:sizeof、typedef
我相信,大部分關鍵字我們都能認識,并且能夠使用,有一部分可能很少見,甚至一點印象也沒有:它也是C語言的關鍵字???
1.隱形刺客:auto
描述:
auto關鍵字在我們寫的代碼里幾乎看不到,但是它又無處不在,它是如此的重要,又是如此的與世無爭,默默的履行著自己的義務,卻又隱姓埋名。
作用:C程序是面向過程的,在C代碼中會出現大量的函數模塊,每個函數都有其生命周期(也稱作用域),在函數生命周期中聲明的變量通常叫做局部變量,也叫自動變量。例如:

復制代碼 代碼如下:

    int fun(){ 
          int a = 10;      // auto int a = 10; 
          // do something 
          return 0; 
    } 

復制代碼 代碼如下:

    int fun(){ 
          int a = 10;      // auto int a = 10; 
          // do something 
          return 0; 
    } 

整型變量a在fun函數內聲明,其作用域為fun函數內,出來fun函數,不能被引用,a變量為自動變量。也就是說編譯器會有int a = 10之前會加上auto的關鍵字。
auto的出現意味著,當前變量的作用域為當前函數或代碼段的局部變量,意味著當前變量會在內存棧上進行分配。
內存棧:
如果大家學過數據結構,應該知道,棧就是先進后出的數據結構。它類似于我們用箱子打包書本,第一本扔進去大英,第二本扔進行高數,第三本扔進行小說,那么取書的時候,先取出來第一本是小說,第二是高數,第三本是大英。
棧的操作為入棧和出棧,入棧就是向箱子里扔書,出棧就是從箱子里取書。那么這和我們的auto變量分配空間有什么關系呢?
由于一個程序中可能會有大量的變量聲明,每個變量都會占有一定的內存空間,而內存空間對于計算機來說是寶貴的硬件資源,因此合理的利用內存是編譯器要做的一個主要任務。有的變量是一次性使用的,如局部變量。有的變量要伴隨著整個程序來使用的,如全局變量。為了節省內存空間,優化性能,編譯器通常會將一次性使用的變量分配在棧上。也就是說,代碼中聲明一個一次性變量,就在棧上進行入棧操作。當該變量使用完了(生命周期結束),進行出棧操作。這樣,在執行不同的函數的時候,就會在一個棧上進行出入棧操作,也就是說它們在頻繁的使用一個相同的內存空間,從而可以更高效的利用內存。

PS:有的編譯器為了提高效率,在出棧時不會進行數據清空,這也就意味著,下個函數里的變量在入棧使用該空間時,里面的數據是上一次變量操作的結果。
2.閃電飛刀:register
描述:register就和它的名字一樣,很少出現在代碼世界中,因為敢稱為閃電飛刀的變量,通常只會在一些特定場合才能出現。它是如此的快,以致于CPU都對其刮目相看,但是它有一個致命的缺點,它的速度“看心情”而定,不是每一次都能讓人滿意。
作用:如果一個變量被register來修辭,就意味著,該變量會作為一個寄存器變量,讓該變量的訪問速度達到最快。比如:一個程序邏輯中有一個很大的循環,循環中有幾個變量要頻繁進行操作,這些變量可以聲明為register類型。
寄存器變量:寄存器變量是指一個變量直接引用寄存器,也就是對變量名的操作的結果是直接對寄存器進行訪問。寄存器是CPU的親信,CPU操作的每個操作數和操作結果,都由寄存器來暫時保存,最后才寫入到內存或從內存中讀出。也就是說,變量的值通常保存在內存中,CPU對變量進行讀取先是將變量的值從內存中讀取到寄存器中,然后進行運算,運算完將結果寫回到內存中。為什么要這么設計,而不直接對變量的值從內存中進行運算,而要再借助于寄存器?這是由于考慮到性能的問題才這么設計的。在計算機系統中,包含有很多種不同類型的存儲器,如表xxx所示。
表xxx 計算機存儲器分類

名稱

速度

特點

用途

靜態存儲器

最快

造價高,體積大,適合小容量的緩存

寄存器,緩存

動態存儲器

較快

造價較低,體積較小,適合大容易保存數據

內存


在計算機中CPU的運算速度最快,現在都達到3GHZ左右,而相對應的存儲器速度卻相對慢很多,訪問速度最快的寄存器和緩存,由于其體積又大,不適合大容量的使用,所以只能二者相接合的方式來提高效率。程序代碼保存在內存中,當使用數據時,將其送到寄存器,讓CPU來訪問,使用完畢,送回內存保存。而C語言又允許使用寄存器來保存變量的值,很明顯這樣能大大提高程序的執行速度,但是,寄存器的個數是有限的,X86也就是十幾個,ARM最多才37個。我們不可能將全部的變量都聲明為寄存器變量,因為其它代碼也要使用寄存器,同樣,我們聲明的寄存器變量也不一定直接保存在寄存器中,因為寄存器可能全部都在被其它代碼占用。編譯器只能是盡量的為我們的變量安排在寄存器中。
在使用寄存器變量時,請注意:
待聲明為寄存器變量類型應該是CPU寄存器所能接受的類型,意味著寄存器變量是單個變量,變量長度應該小于等于寄存器長度
不能對寄存器變量使用取地址符“&”,因為該變量沒有內存地址
盡量在大量頻繁的操作時使用寄存器變量,且聲明的變量個數應該盡量的少

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产视频久久久久| 欧美成人国产va精品日本一级| 国产精品一区二区av影院萌芽| 日韩美女视频免费在线观看| 久久国产天堂福利天堂| 久久久久久久久久久久久久久久久久av| 91在线免费观看网站| 中文字幕久热精品视频在线| 日本sm极度另类视频| 日韩在线视频导航| 91久久久国产精品| 国产精品一区二区三区久久久| 亚洲在线视频福利| 九九久久久久99精品| 韩国欧美亚洲国产| 久久久久久成人精品| 成人黄色网免费| 亚洲人成人99网站| 疯狂做受xxxx欧美肥白少妇| 精品成人国产在线观看男人呻吟| 国产精品日日摸夜夜添夜夜av| 欧美在线视频网| 亚洲成人免费网站| 精品福利樱桃av导航| 亚洲国产成人久久综合| 亚洲成人免费网站| 国产香蕉一区二区三区在线视频| 久久久99久久精品女同性| 日韩在线国产精品| 久久99热精品这里久久精品| 欧美日韩高清在线观看| 97超级碰在线看视频免费在线看| 亚洲在线视频观看| 久久久精品日本| 2018中文字幕一区二区三区| 日韩电影在线观看永久视频免费网站| 欧美另类高清videos| 91社影院在线观看| 欧美性理论片在线观看片免费| 亚洲久久久久久久久久| 日韩欧美在线观看| 欧美黄色免费网站| 亚洲最大成人在线| 久久久久国产一区二区三区| 日韩三级成人av网| 中文字幕日韩精品在线观看| 亚洲最新av网址| 成人a在线观看| 欧美性生活大片免费观看网址| 久久影视电视剧凤归四时歌| 啊v视频在线一区二区三区| 精品自拍视频在线观看| 久久久久久网站| 亚洲最大福利视频| 少妇精69xxtheporn| 日韩电影中文字幕av| 亚洲图片在线综合| 亚洲欧美日韩在线一区| 一个人看的www久久| 91系列在线观看| 91视频8mav| 亚洲v日韩v综合v精品v| 久久久久久久一| 中文字幕视频一区二区在线有码| 在线午夜精品自拍| 日韩精品电影网| 欧美性在线观看| 欧美激情videos| 97精品国产97久久久久久春色| 2019中文字幕在线免费观看| 91欧美激情另类亚洲| 精品国产一区二区三区久久| 欧美视频在线免费| 欧美日韩亚洲视频一区| 成人国内精品久久久久一区| 性欧美暴力猛交69hd| 青青精品视频播放| 亚洲第一网站男人都懂| 欧美中文字幕视频| 日韩三级影视基地| 日韩电影大全免费观看2023年上| 精品美女国产在线| 日韩精品免费在线播放| 国产男人精品视频| 精品福利在线视频| 色悠悠久久88| 国产精品爽爽ⅴa在线观看| 精品亚洲精品福利线在观看| 久久久久这里只有精品| 欧美夜福利tv在线| 一本一本久久a久久精品综合小说| 热久久99这里有精品| 92看片淫黄大片欧美看国产片| 国产一区二区欧美日韩| 国产美女精品免费电影| 久久精品中文字幕一区| 国产精品爽爽爽爽爽爽在线观看| 精品自拍视频在线观看| 成人黄色免费在线观看| 日韩av在线网址| 亚洲人成亚洲人成在线观看| 亚洲人精品午夜在线观看| 日韩中文理论片| 91在线观看免费高清| 久久久精品在线观看| 国产一区二区三区视频免费| 午夜精品一区二区三区在线视| 亚洲色图av在线| 97视频在线免费观看| 91av在线播放视频| 性色av一区二区三区红粉影视| 中文字幕9999| 91免费的视频在线播放| 久久精品国产亚洲7777| 亚洲精品v欧美精品v日韩精品| 亚洲一区二区三区视频播放| 粉嫩av一区二区三区免费野| 欧美日韩亚洲精品内裤| 亚洲一区免费网站| 国产免费一区视频观看免费| 欧美激情亚洲综合一区| 亚洲欧美国产精品专区久久| 亚洲护士老师的毛茸茸最新章节| 韩国19禁主播vip福利视频| 久久久久久久亚洲精品| 久热国产精品视频| 日本亚洲欧洲色| 久久久国产精品免费| 琪琪亚洲精品午夜在线| 91九色视频在线| 亚洲视频在线观看视频| 欧美精品videosex性欧美| 91精品国产91| 亚洲欧美国产一区二区三区| 亚洲视频在线观看视频| 久久久999国产| 夜夜嗨av一区二区三区免费区| 亚洲一区二区三区四区在线播放| 成人免费黄色网| 亚洲欧美中文另类| 亚洲色图35p| 亚洲欧美精品一区二区| 欧美另类极品videosbestfree| 欧美精品福利视频| 成人春色激情网| 亚洲黄页视频免费观看| 尤物99国产成人精品视频| 国产亚洲精品久久久久久777| 欧美亚洲激情视频| 精品毛片网大全| 日韩成人在线免费观看| 欧美电影免费在线观看| 亚洲女人被黑人巨大进入al| 91视频8mav| 国产精品一区二区三| 国产极品精品在线观看| 成人在线视频福利| 亚洲视频网站在线观看| 亚洲成年人在线| 黑人巨大精品欧美一区免费视频| 亚洲欧美日韩精品久久| 国产99久久精品一区二区永久免费| 91夜夜未满十八勿入爽爽影院| 国产专区精品视频|