一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

C語(yǔ)言

C語(yǔ)言register關(guān)鍵字的使用

時(shí)間:2025-03-29 12:21:16 C語(yǔ)言 我要投稿
  • 相關(guān)推薦

C語(yǔ)言register關(guān)鍵字的使用

  register:這個(gè)關(guān)鍵字請求編譯器盡可能的將變量存在CPU內部寄存器中,而不是通過(guò)內存尋址訪(fǎng)問(wèn),以提高效率。注意是盡可能,不是絕對。你想想,一個(gè)CPU 的寄存器也就那么幾個(gè)或幾十個(gè),你要是定義了很多很多register 變量,它累死也可能不能全部把這些變量放入寄存器吧,輪也可能輪不到你。關(guān)于該關(guān)鍵字你了解多少呢?下面是相關(guān)的知識,歡迎閱讀。

  一、皇帝身邊的小太監----寄存器

  不知道什么是寄存器?那見(jiàn)過(guò)太監沒(méi)有?沒(méi)有?其實(shí)我也沒(méi)有。沒(méi)見(jiàn)過(guò)不要緊,見(jiàn)過(guò)就麻煩大了。^_^,大家都看過(guò)古裝戲,那些皇帝們要閱讀奏章的時(shí)候,大臣總是先將奏章交給皇帝旁邊的小太監,小太監呢再交給皇帝同志處理。這個(gè)小太監只是個(gè)中轉站,并無(wú)別的功能。

  好,那我們再聯(lián)想到我們的CPU。CPU 不就是我們的皇帝同志么?大臣就相當于我們的內存,數據從他這拿出來(lái)。那小太監就是我們的寄存器了(這里先不考慮CPU 的高速緩存區)。數據從內存里拿出來(lái)先放到寄存器,然后CPU 再從寄存器里讀取數據來(lái)處理,處理完后同樣把數據通過(guò)寄存器存放到內存里,CPU 不直接和內存打交道。這里要說(shuō)明的一點(diǎn)是:小太監是主動(dòng)的從大臣手里接過(guò)奏章,然后主動(dòng)的交給皇帝同志,但寄存器沒(méi)這么自覺(jué),它從不主動(dòng)干什么事。一個(gè)皇帝可能有好些小太監,那么一個(gè)CPU 也可以有很多寄存器,不同型號的'CPU 擁有寄存器的數量不一樣。

  為啥要這么麻煩啊?速度!就是因為速度。寄存器其實(shí)就是一塊一塊小的存儲空間,只不過(guò)其存取速度要比內存快得多。進(jìn)水樓臺先得月嘛,它離CPU 很近,CPU 一伸手就拿到數據了,比在那么大的一塊內存里去尋找某個(gè)地址上的數據是不是快多了?那有人問(wèn)既然它速度那么快,那我們的內存硬盤(pán)都改成寄存器得了唄。我要說(shuō)的是:你真有錢(qián)!

  二、舉例

  register修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的`話(huà),應將其保存在CPU的寄存器中,以加快其存儲速度。例如下面的內存塊拷貝代碼,

  #ifdef NOSTRUCTASSIGN

  memcpy (d, s, l)

  {

  register char *d;

  register char *s;

  register int i;

  while (i--)

  *d++ = *s++;

  }

  #endif

  三、使用register 修飾符的注意點(diǎn)

  但是使用register修飾符有幾點(diǎn)限制。

  首先,register變量必須是能被CPU所接受的類(lèi)型。這通常意味著(zhù)register變量必須是一個(gè)單個(gè)的值,并且長(cháng)度應該小于或者等于整型的長(cháng)度。不過(guò),有些機器的寄存器也能存放浮點(diǎn)數。

  其次,因為register變量可能不存放在內存中,所以不能用“&”來(lái)獲取register變量的地址。

  由于寄存器的數量有限,而且某些寄存器只能接受特定類(lèi)型的數據(如指針和浮點(diǎn)數),因此真正起作用的register修飾符的數目和類(lèi)型都依賴(lài)于運行程序的機器,而任何多余的register修飾符都將被編譯程序所忽略。

  在某些情況下,把變量保存在寄存器中反而會(huì )降低程序的運行速度。因為被占用的寄存器不能再用于其它目的;或者變量被使用的次數不夠多,不足以裝入和存儲變量所帶來(lái)的額外開(kāi)銷(xiāo)。

  早期的C編譯程序不會(huì )把變量保存在寄存器中,除非你命令它這樣做,這時(shí)register修飾符是C語(yǔ)言的`一種很有價(jià)值的補充。然而,隨著(zhù)編譯程序設計技術(shù)的進(jìn)步,在決定那些變量應該被存到寄存器中時(shí),現在的C編譯環(huán)境能比程序員做出更好的決定。實(shí)際上,許多編譯程序都會(huì )忽略register修飾符,因為盡管它完全合法,但它僅僅是暗示而不是命令。


【C語(yǔ)言register關(guān)鍵字的使用】相關(guān)文章:

C語(yǔ)言關(guān)鍵字:auto、static、register、const08-06

register關(guān)鍵字在c語(yǔ)言和c++中的差異09-23

C語(yǔ)言關(guān)鍵字const的使用09-02

C語(yǔ)言的關(guān)鍵字define的使用08-03

C語(yǔ)言的關(guān)鍵字enum的使用09-24

C語(yǔ)言關(guān)鍵字static的使用09-15

關(guān)鍵字register分析07-24

總結C語(yǔ)言中const關(guān)鍵字的使用08-22

C語(yǔ)言中const關(guān)鍵字的使用方法10-02

一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看