chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析C語(yǔ)言中的regiseter關(guān)鍵字

學(xué)益得智能硬件 ? 來(lái)源:學(xué)益得智能硬件 ? 2023-08-25 17:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

C語(yǔ)言中重要的關(guān)鍵字有很多,static const extern我們之前都講過(guò),還有一個(gè)在面試中出現(xiàn)的頻率也比較高:register。

register翻譯過(guò)來(lái)是寄存器的意思,可以在定義變量的時(shí)候加在前面,我們把它稱(chēng)作寄存器變量。

寄存器變量的作用在于提高程序的運(yùn)行效率。

我們經(jīng)常用到的存儲(chǔ)介質(zhì)大概有這么幾種,硬盤(pán)、內(nèi)存、緩存、寄存器,越往上訪問(wèn)速度越快,當(dāng)然價(jià)格也越高。

d07e1196-4326-11ee-a2ef-92fbcf53809c.png ?

運(yùn)行程序的時(shí)候,計(jì)算機(jī)會(huì)把大部分的數(shù)據(jù)存放在內(nèi)存中,然后CPU會(huì)從內(nèi)存中讀取需要的數(shù)據(jù)。

雖然訪問(wèn)內(nèi)存的速度比訪問(wèn)硬盤(pán)來(lái)的快,但是跟CPU的速度比起來(lái),還是慢了很多。

于是C語(yǔ)言就有了register關(guān)鍵字,被register修飾的變量很有可能放在寄存器中,這樣,CPU就能直接從寄存器中讀取變量,提高程序的運(yùn)行效率。

對(duì)于需要頻繁訪問(wèn)的變量,可以把它聲明成寄存器變量。

寫(xiě)個(gè)代碼試試:

int main()
{
    int i;
for(i= 0; i < 10000000; i++);
????
????printf("helloworld
");
????
    return 0;
}
i作為循環(huán)變量,會(huì)被頻繁訪問(wèn)。

先是不加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語(yǔ)言中的取地址操作取的是內(nèi)存的地址,變量放在寄存器中不存在地址這一說(shuō)法,如果強(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,并沒(méi)有效果。






審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5495

    瀏覽量

    127793
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    183

    文章

    7634

    瀏覽量

    143925
  • 緩存器
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    11982
  • for循環(huán)
    +關(guān)注

    關(guān)注

    0

    文章

    61

    瀏覽量

    2827

原文標(biāo)題:regiseter關(guān)鍵字

文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言關(guān)鍵字const的幾種用法

    本期來(lái)講解一個(gè)C語(yǔ)言關(guān)鍵字——const。
    發(fā)表于 06-21 11:05 ?2268次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>關(guān)鍵字</b>const的幾種用法

    static 關(guān)鍵字

    static 關(guān)鍵字 淺析
    發(fā)表于 01-16 16:55

    C語(yǔ)言volatile關(guān)鍵字詳解 精選資料分享

    1.volatile和什么有關(guān)百度翻譯是這樣子翻譯volatile的:圖1-1 百度翻譯volatile截圖volatile屬于C語(yǔ)言關(guān)鍵字,《C Primer Puls》 是這樣解
    發(fā)表于 07-22 07:20

    C語(yǔ)言中關(guān)鍵字static的作用是什么

    C語(yǔ)言中關(guān)鍵字static的作用是什么?用預(yù)處理指令#define 聲明一個(gè)函數(shù),輸入天數(shù)得到有多少秒?
    發(fā)表于 12-24 06:53

    C語(yǔ)言中的volatile關(guān)鍵字

    volatile關(guān)鍵字是一種類(lèi)型修飾符,用它聲明的類(lèi)型變量表示可以被某些編譯器未知的因素更改。
    發(fā)表于 05-27 09:32 ?3377次閱讀

    單片機(jī)C語(yǔ)言中常用到的關(guān)鍵字及數(shù)據(jù)類(lèi)型

    單片機(jī)C語(yǔ)言中常用到的關(guān)鍵字及數(shù)據(jù)類(lèi)型。
    發(fā)表于 11-03 10:57 ?13次下載

    標(biāo)準(zhǔn)C語(yǔ)言總共有32個(gè)關(guān)鍵字

    標(biāo)準(zhǔn)C語(yǔ)言總共有32個(gè)關(guān)鍵字
    發(fā)表于 01-12 15:59 ?0次下載

    C語(yǔ)言32個(gè)關(guān)鍵字

    C語(yǔ)言32個(gè)關(guān)鍵字,感興趣的小伙伴們可以看看。
    發(fā)表于 07-26 16:29 ?67次下載

    C語(yǔ)言中關(guān)鍵字

    C語(yǔ)言中的入門(mén)教程
    發(fā)表于 10-14 16:24 ?3次下載

    淺析C語(yǔ)言中typedef關(guān)鍵字的作用

    C 語(yǔ)言提供了 typedef 關(guān)鍵字,您可以使用它來(lái)為類(lèi)型取一個(gè)新的名字。
    的頭像 發(fā)表于 11-08 08:42 ?6384次閱讀

    【嵌入式】C語(yǔ)言中volatile關(guān)鍵字

    volatile06. 附錄01. volatile概述volatile是C語(yǔ)言中的一個(gè)關(guān)鍵字。將變量定義為volatile就表示告訴編譯器這個(gè)變量可能會(huì)被竟想不到地改變,在這種情況下,編譯器就不會(huì)去假設(shè)這個(gè)變量的值了,及優(yōu)化器
    發(fā)表于 10-21 10:21 ?6次下載
    【嵌入式】<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b>volatile<b class='flag-5'>關(guān)鍵字</b>

    C語(yǔ)言中__attribute__ 關(guān)鍵字的用法

    嵌入式開(kāi)發(fā),離不開(kāi) C 語(yǔ)言C語(yǔ)言中有很多語(yǔ)法會(huì)直接或間接影響你代碼的質(zhì)量,下面就來(lái)講講__attribute__ 關(guān)鍵字的用法。 1.
    發(fā)表于 10-19 09:06 ?1.4w次閱讀

    C語(yǔ)言32個(gè)關(guān)鍵字可以分為這幾類(lèi)

    C語(yǔ)言是一種面向過(guò)程、抽象化的通用程序設(shè)計(jì)語(yǔ)言,廣泛應(yīng)用于嵌入式底層和系統(tǒng)開(kāi)發(fā)。C語(yǔ)言關(guān)鍵字共有
    的頭像 發(fā)表于 12-31 15:28 ?6072次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>32個(gè)<b class='flag-5'>關(guān)鍵字</b>可以分為這幾類(lèi)

    快速掌握C語(yǔ)言關(guān)鍵字

    C語(yǔ)言中的32個(gè)關(guān)鍵字你知道多少個(gè)呢?根據(jù)關(guān)鍵字的作用分為四類(lèi):數(shù)據(jù)類(lèi)型關(guān)鍵字、控制語(yǔ)句關(guān)鍵字、
    的頭像 發(fā)表于 07-06 08:04 ?1044次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>關(guān)鍵字</b>

    C語(yǔ)言關(guān)鍵字--typedef

    C語(yǔ)言關(guān)鍵字使用方法學(xué)習(xí)指南!
    的頭像 發(fā)表于 10-07 12:44 ?777次閱讀