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