天天看點

C語言register關鍵字

register:關鍵字請求編譯器盡可能的将變量存在CPU内部寄存器中,而不是通過記憶體尋址通路,以提高效率。注意是盡可能,不是絕對。

設定原因:

    由于cpu和記憶體存取速度不一緻,導緻對于常用的變量存儲在寄存器比存儲在記憶體要提高程式的運作速度。

使用register修飾符的注意點

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

  首先,register變量必須是能被CPU所接受的類型。這通常意味着register變量必須是一個單個的值,并且長度應該小于或者等于整型的長度。不過,有些機器的寄存器也能存放浮點數。

  其次,因為register變量可能不存放在記憶體中,是以不能用“&”來擷取register變量的位址。

  由于寄存器的數量有限,而且某些寄存器隻能接受特定類型的資料(如指針和浮點數),是以真正起作用的register修飾符的數目和類型都依賴于運作程式的機器,而任何多餘的register修飾符都将被編譯程式所忽略。

  在某些情況下,把變量儲存在寄存器中反而會降低程式的運作速度。因為被占用的寄存器不能再用于其它目的;或者變量被使用的次數不夠多,不足以裝入和存儲變量所帶來的額外開銷。

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