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