C語言中重要的關(guān)鍵字有很多,static const extern我們之前都講過,還有一個(gè)在面試中出現(xiàn)的頻率也比較高:register。
register翻譯過來是寄存器的意思,可以在定義變量的時(shí)候加在前面,我們把它稱作寄存器變量。
寄存器變量的作用在于提高程序的運(yùn)行效率。
我們經(jīng)常用到的存儲(chǔ)介質(zhì)大概有這么幾種,硬盤、內(nèi)存、緩存、寄存器,越往上訪問速度越快,當(dāng)然價(jià)格也越高。 ?
運(yùn)行程序的時(shí)候,計(jì)算機(jī)會(huì)把大部分的數(shù)據(jù)存放在內(nèi)存中,然后CPU會(huì)從內(nèi)存中讀取需要的數(shù)據(jù)。
雖然訪問內(nèi)存的速度比訪問硬盤來的快,但是跟CPU的速度比起來,還是慢了很多。
于是C語言就有了register關(guān)鍵字,被register修飾的變量很有可能放在寄存器中,這樣,CPU就能直接從寄存器中讀取變量,提高程序的運(yùn)行效率。
對(duì)于需要頻繁訪問的變量,可以把它聲明成寄存器變量。
寫個(gè)代碼試試:
int main() { int i; for(i= 0; i < 10000000; i++); ???? ????printf("helloworld "); ???? return 0; }i作為循環(huán)變量,會(huì)被頻繁訪問。
先是不加register,編譯的時(shí)候不優(yōu)化。
root@Turbo:test# gcc test.c -o test -O0 root@Turbo:test#如果不加這個(gè)-O選項(xiàng),有些編譯器可能把這樣的for循環(huán)當(dāng)作廢話優(yōu)化掉。
運(yùn)行的時(shí)間大概是這樣的:
root@Turbo:test# time ./test hellowrold real 0m0.021s user 0m0.020s sys 0m0.000s root@Turbo:test#然后修改代碼,在i的前面加上register:
int main() { register int i; for (i = 0; i < 10000000; i++); printf("helloworld "); return 0; }再次編譯運(yùn)行,時(shí)間確實(shí)會(huì)縮短很多:
root@Turbo:test# gcc test.c -o test -O0 root@Turbo:test# time ./test hellowrold real 0m0.004s user 0m0.000s sys 0m0.004s root@Turbo:test#關(guān)于register關(guān)鍵字,有個(gè)經(jīng)典的面試題,就是寄存器變量不能做取地址操作?
register int i; &i;C語言中的取地址操作取的是內(nèi)存的地址,變量放在寄存器中不存在地址這一說法,如果強(qiáng)行取地址,編譯就會(huì)報(bào)錯(cuò)。
root@Turbo:test# gcc test.c -o test -O0 test.c: In function ‘main’: test.c:8:2: error: address of register variable ‘i’ requested 8 | &i; | ^ root@Turbo:test#最后,register關(guān)鍵字還容易存在一個(gè)誤區(qū):既然register能提高程序的運(yùn)行效率,那能不能把所有的變量都聲明成register?
這個(gè)肯定不行,因?yàn)榧拇嫫魅萘慨吘褂邢?,聲明的太多,寄存器根本放不下?br />
所以少量的還行,都聲明成register,并沒有效果。
審核編輯:劉清
-
寄存器
+關(guān)注
關(guān)注
31文章
5368瀏覽量
121241 -
C語言
+關(guān)注
關(guān)注
180文章
7614瀏覽量
137800 -
緩存器
+關(guān)注
關(guān)注
0文章
63瀏覽量
11693 -
for循環(huán)
+關(guān)注
關(guān)注
0文章
61瀏覽量
2543
原文標(biāo)題:regiseter關(guān)鍵字
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
C語言volatile關(guān)鍵字詳解 精選資料分享
在C語言中關(guān)鍵字static的作用是什么
C語言中的volatile關(guān)鍵字
單片機(jī)C語言中常用到的關(guān)鍵字及數(shù)據(jù)類型
淺析C語言中typedef關(guān)鍵字的作用
【嵌入式】C語言中volatile關(guān)鍵字
![【嵌入式】<b class='flag-5'>C</b><b class='flag-5'>語言中</b>volatile<b class='flag-5'>關(guān)鍵字</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
C語言中__attribute__ 關(guān)鍵字的用法
C語言32個(gè)關(guān)鍵字可以分為這幾類
![<b class='flag-5'>C</b><b class='flag-5'>語言</b>32個(gè)<b class='flag-5'>關(guān)鍵字</b>可以分為這幾類](https://file.elecfans.com/web2/M00/13/4A/pYYBAGExkySAX2f9AAAmWFswUeo867.png)
快速掌握C語言關(guān)鍵字
![快速掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>關(guān)鍵字</b>](https://file.elecfans.com/web2/M00/9B/3D/poYBAGQjnauAVXOgAABFcEbXdEE684.png)
評(píng)論