色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

淺析C語言中的regiseter關鍵字

學益得智能硬件 ? 來源:學益得智能硬件 ? 2023-08-25 17:10 ? 次閱讀

C語言中重要的關鍵字有很多,static const extern我們之前都講過,還有一個在面試中出現的頻率也比較高:register。

register翻譯過來是寄存器的意思,可以在定義變量的時候加在前面,我們把它稱作寄存器變量。

寄存器變量的作用在于提高程序的運行效率。

我們經常用到的存儲介質大概有這么幾種,硬盤、內存、緩存、寄存器,越往上訪問速度越快,當然價格也越高。

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

運行程序的時候,計算機會把大部分的數據存放在內存中,然后CPU會從內存中讀取需要的數據。

雖然訪問內存的速度比訪問硬盤來的快,但是跟CPU的速度比起來,還是慢了很多。

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

對于需要頻繁訪問的變量,可以把它聲明成寄存器變量。

寫個代碼試試:

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

先是不加register,編譯的時候不優化。
root@Turbo:test# gcc test.c -o test -O0
root@Turbo:test#
如果不加這個-O選項,有些編譯器可能把這樣的for循環當作廢話優化掉。

運行的時間大概是這樣的:
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;
}
再次編譯運行,時間確實會縮短很多:
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#
關于register關鍵字,有個經典的面試題,就是寄存器變量不能做取地址操作?
register int i;
&i;
C語言中的取地址操作取的是內存的地址,變量放在寄存器中不存在地址這一說法,如果強行取地址,編譯就會報錯。
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關鍵字還容易存在一個誤區:既然register能提高程序的運行效率,那能不能把所有的變量都聲明成register?

這個肯定不行,因為寄存器容量畢竟有限,聲明的太多,寄存器根本放不下。

所以少量的還行,都聲明成register,并沒有效果。






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

    關注

    31

    文章

    5336

    瀏覽量

    120232
  • C語言
    +關注

    關注

    180

    文章

    7604

    瀏覽量

    136697
  • 緩存器
    +關注

    關注

    0

    文章

    63

    瀏覽量

    11658
  • for循環
    +關注

    關注

    0

    文章

    61

    瀏覽量

    2502

原文標題:regiseter關鍵字

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言關鍵字const的幾種用法

    本期來講解一個C語言關鍵字——const。
    發表于 06-21 11:05 ?1653次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>關鍵字</b>const的幾種用法

    static 關鍵字

    static 關鍵字 淺析
    發表于 01-16 16:55

    C語言volatile關鍵字詳解 精選資料分享

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

    C語言中關鍵字static的作用是什么

    C語言中關鍵字static的作用是什么?用預處理指令#define 聲明一個函數,輸入天數得到有多少秒?
    發表于 12-24 06:53

    C語言中的volatile關鍵字

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

    單片機C語言中常用到的關鍵字及數據類型

    單片機C語言中常用到的關鍵字及數據類型。
    發表于 11-03 10:57 ?13次下載

    標準C語言總共有32個關鍵字

    標準C語言總共有32個關鍵字
    發表于 01-12 15:59 ?0次下載

    C語言32個關鍵字

    C語言32個關鍵字,感興趣的小伙伴們可以看看。
    發表于 07-26 16:29 ?66次下載

    C語言中關鍵字

    C語言中的入門教程
    發表于 10-14 16:24 ?3次下載

    淺析C語言中typedef關鍵字的作用

    C 語言提供了 typedef 關鍵字,您可以使用它來為類型取一個新的名字。
    的頭像 發表于 11-08 08:42 ?5997次閱讀

    【嵌入式】C語言中volatile關鍵字

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

    C語言中__attribute__ 關鍵字的用法

    嵌入式開發,離不開 C 語言,C語言中有很多語法會直接或間接影響你代碼的質量,下面就來講講__attribute__ 關鍵字的用法。 1.
    發表于 10-19 09:06 ?1.2w次閱讀

    C語言32個關鍵字可以分為這幾類

    C語言是一種面向過程、抽象化的通用程序設計語言,廣泛應用于嵌入式底層和系統開發。C語言關鍵字共有
    的頭像 發表于 12-31 15:28 ?5052次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>32個<b class='flag-5'>關鍵字</b>可以分為這幾類

    快速掌握C語言關鍵字

    C語言中的32個關鍵字你知道多少個呢?根據關鍵字的作用分為四類:數據類型關鍵字、控制語句關鍵字
    的頭像 發表于 07-06 08:04 ?339次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>關鍵字</b>

    C語言關鍵字--typedef

    C語言關鍵字使用方法學習指南!
    的頭像 發表于 10-07 12:44 ?242次閱讀
    主站蜘蛛池模板: 精品久久久久中文字幕加勒比东京热 | 男女午夜性爽快免费视频不卡| 久久精品热老司机| 精品久久久噜噜噜久久7| 久久人妻少妇嫩草AV蜜桃35I| 久久亚洲精品专区蓝色区| 美女白虎穴| 全黄h全肉短篇禁乱np| 色噜噜视频影院| 亚洲欧洲日本天天堂在线观看| 亚洲欧美日韩国产另类电影| 伊人网综合网| 成人综合在线观看| 国产在线观看成人| 少妇被躁爽到高潮无码久久| 色噜噜狠狠色综合欧洲| 亚洲精品蜜桃AV久久久| 诱受H嗯啊巨肉各种play| PORN白嫩内射合集| 国产色精品久久人妻无码看片软件 | 亚洲电影第1页| 99久久亚洲| 国产亚洲精品线观看不卡| 暖暖 免费 高清 日本 在线| 色欲色香天天天综合| 2019一級特黃色毛片免費看| 国产精品无码AV天天爽色欲| 免费在线观看黄色网址| 亚洲高清视频在线观看| 99热久久视频只有精品6| 国产一区二区三区在线看片| 青青视频 在线 在线播放| 男人都懂www深夜免费网站| 亚洲精品中文字幕一二三四区 | 嫩草伊人久久精品少妇AV网站| 亚洲AV精品乱码专区| 成年无码av片| 全彩acg无翼乌火影忍者| 97影院理论午夜伦不卡偷| 把腿张开老子CAO烂你动态图| 久草在线福利视频在线播放|