C語言 register關鍵字

2021-08-31 23:45:14 字數 1090 閱讀 3629

一、概念

register:這個關鍵字請求編譯器盡可能的將變數存在cpu內部暫存器中,而不是通過記憶體定址訪問,以提高效率。注意是盡可能,不是絕對

因為,如果定義了很多register變數,可能會超過cpu的暫存器個數,超過容量。所以只是可能。

暫存器其實就是一塊一塊小的儲存空間,只不過其訪問速度要比記憶體快得多。它離cpu 很近,cpu 一伸手就拿到資料了,比在那麼大的一塊記憶體裡去尋找某個位址上的資料快多了

二、舉例

register修飾符暗示編譯程式相應的變數將被頻繁地使用,如果可能的話,應將其儲存在cpu的暫存器中,以加快其儲存速度。例如下面的記憶體塊拷貝**,

#ifdef nostructassign

memcpy (d, s, l)

#endif

三、其他

但是使用register修飾符有幾點限制。

1.register變數必須是能被cpu所接受的型別。這通常意味著register變數必須是乙個單個的值,並且長度應該小於或者等於整型的長度。不過,有些機器的暫存器也能存放浮點數。    

2.因為register變數可能不存放在記憶體中,所以不能用「&」來獲取register變數的位址。由於暫存器的數量有限,而且某些暫存器只能接受特定型別的資料(如指標和浮點數),因此真正起作用的register修飾符的數目和型別都依賴於執行程式的機器,而任何多餘的register修飾符都將被編譯程式所忽略。在某些情況下,把變數儲存在暫存器中反而會降低程式的執行速度。因為被占用的暫存器不能再用於其它目的;或者變數被使用的次數不夠多,不足以裝入和儲存變數所帶來的額外開銷。

3.早期的c編譯程式不會把變數儲存在暫存器中,除非你命令它這樣做,這時register修飾符是c語言的一種很有價值的補充。然而,隨著編譯程式設計技術的進步,在決定那些變數應該被存到暫存器中時,現在的c編譯環境能比程式設計師做出更好的決定。實際上,許多編譯程式都會忽略register修飾符,因為儘管它完全合法,但它僅僅是暗示而不是命令

C語言關鍵字register

功能 用關鍵字register修飾變數,是想將變數變成暫存器變數,儲存在cpu的內部暫存器中,省去了cpu從記憶體抓取資料的時間,提高了程式的執行效率。適用型別 頻繁被訪問的變數或迴圈變數可以用register修飾 對編譯系統而言,只是 建議性的,而非指令性的 注意事項 1 register只能修飾...

c語言關鍵字之register

register關鍵字請求編譯器盡可能地將變數存在cpu內部暫存器中,而不是通過記憶體定址訪問以提高效率。使用register修飾符有幾點限制 1 因為register變數可能不存放在記憶體中,所以不能用 來獲取register變數的位址。void main 2 只有區域性自動變數和形式引數可以作為...

C語言關鍵字 auto和register

在我對c語言進行培訓的時候,往往就是從c語言的關鍵字入手,因為c語言的關鍵字蘊含了c語言的全部的詞彙,囊括了c語言裡大量知識要點,從c語言關鍵字開刀,首先可以對你之前所學知識進行複習,其次,切磋一下和作者有什麼不同的見解,廢話少說,讓我們從關鍵字開始。關鍵字,又叫保留字,是編譯器能識別的特殊單詞,每...