C++中register關鍵字舉例詳解
register 簡介:
register 就像是漢語和英語中的形容詞(不要問為什么只有兩種語言,因為小編只會這兩種),在 C++ 中 register 是用來修飾變量的。
register 的作用:
register 聲明的變量是直接放在cpu的寄存器當中,而非就是通過內存尋址訪問,這樣就可以大大的提高程序的運行效率。
總而言之,寫上不會虧。
還需要注意,register 聲明變量只能在主函數(shù)或自定義內部。注意:是內部,定義在外面是會報錯的。
for(int i=1;i<=1000000;i++)
{
......
}
for(register int i=1;i<=1000000;i++)
{
......
}在第一個 for 循環(huán)中,變量 i 存儲在內存中,cpu 每次要從內存中取出變量 i,這樣 cpu 就要來回讀取10000次,只是很低效的。
而在第二個 for 循環(huán)中,cpu每次都會直接去寄存器上讀取變量i,而不用再去內存讀取,因此,代碼的效率也會大大提高。
補充知識:register函數(shù)的限制
1、register變量必須是能被CPU所接受的類型。這通常意味著register變量必須是一個單個的值,并且長度應該小于或者等于整型的長度。不過,有些機器的寄存器也能存放浮點數(shù)。
2、因為register變量可能不存放在內存中,所以不能用“&”來獲取register變量的地址。
3、由于寄存器的數(shù)量有限,而且某些寄存器只能接受特定類型的數(shù)據(jù)(如指針和浮點數(shù)),因此真正起作用的register修飾符的數(shù)目和類型都依賴于運行程序的機器,而任何多余的register修飾符都將被編譯程序所忽略。
4、只有局部自動變量和形式參數(shù)可以作為寄存器變量,其它(如全局變量)不行。
5、局部靜態(tài)變量不能定義為寄存器變量。不能寫成:register static int a, b, c;
6、在某些情況下,把變量保存在寄存器中反而會降低程序的運行速度。因為被占用的寄存器不能再用于其它目的;或者變量被使用的次數(shù)不夠多,不足以裝入和存儲變量所帶來的額外開銷。
7、早期的C編譯程序不會把變量保存在寄存器中,除非你命令它這樣做,這時register修飾符是C語言的一種很有價值的補充。然而,隨著編譯程序設計技術的進步,在決定哪些變量應該被存到寄存器中時,C編譯環(huán)境能比程序員做出更好的決定。實際上,許多編譯程序都會忽略register修飾符,因為盡管它完全合法,但它僅僅是暗示而不是命令。
總結
到此這篇關于C++中register關鍵字的文章就介紹到這了,更多相關C++ register關鍵字內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++集體數(shù)據(jù)交換實現(xiàn)示例講解
這篇文章主要介紹了C++集體數(shù)據(jù)交換實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2022-11-11

