暫存器變數是什麼?及它的儲存種類有哪些?
靜態變數、自動變數與暫存器變數的儲存
前兩天看師兄給的c語言的一本小冊子,看到:
記憶體變數或暫存器變數是指程序執行過程中的變數是在記憶體中還是在暫存器中的變數。以前學的時候從來沒有注意過,記憶體變數和暫存器變數指的是什麼呢?這裡和語言中宣告的全域性變數、區域性變數都不是很一樣,這裡對自己蒐集的資料進行乙個梳理。
暫存器變數主要指c語言\c++語言定義的不是儲存在記憶體上,而是直接儲存在cpu中的暫存器中。記憶體變數指儲存在記憶體的儲存單元中的變數,但是如果乙個變數在程式中頻繁使用,比如迴圈使用,就需要對記憶體多次進行訪問,這樣會影響程式的執行效率。
一般的定義格式為:
int
main()
由於暫存器的限制,所以暫存器的數目一般被限制起來,一旦超過限定的數目,c程式會自動將暫存器變數轉換成普通的變數。而且暫存器的長度一般比較小,所以一般只儲存char、int或者指標型別。一般只用於函式中的變數或者形參,而不允許用於外部變數或靜態變數。
register最常用的就是作為迴圈控制變數等需要高速執行的場合。
檢視以下程式,可以看出時間區別:
#include
#include
intregistertest()
;int
withouttest()
;int
main()
intregistertest()
intwithouttest()
執行結果為:
macdemac:test mac$ gcc registertest.c -o registertest
macdemac:test mac$ .
/registertest
macdemac:test mac$ .
/registertest
可以看到時間是縮短了的。
另外需要注意的是,暫存器變數不存在位址,是儲存在硬體cpu中的,所以不可以用&
來取位址。
C語言暫存器變數
暫存器存在於cpu內部,運算速度非常快,因為記憶體中的資料必須載入暫存器才能計算。如果直接定義乙個變數為暫存器變數,則少了載入等過程自然會快。對於頻繁使用的變數可以把它放在暫存器中來提速度。對於vc編譯器會自動優化,即使沒有宣告暫存器變數,vc也會自動優化。對於gcc編譯器就不會自動優化。定義乙個暫...
暫存器變數
在程式執行時,根據需要到記憶體中相應的 儲存單元中呼叫,如果乙個變數在程式中頻繁使用,例如迴圈變數,那麼,系統就必須多次訪問記憶體中的該單元,影響程式的執行效率。因此,c c 語言還定義了一種變數,不是儲存在記憶體上,而是直接儲存在cpu中的暫存器中,這種變數稱為暫存器變數。暫存器變數的定義形式是 ...
暫存器變數
c語言中的變數按儲存區域可以分為三種 堆疊中的自動變數,普通記憶體中得靜態變數,硬體暫存器變數。由於暫存器變數直接存放在cpu中,而不在記憶體中,所以訪問速度極快。一般應用於需要大量次數訪問的變數。暫存器變數只能存放int char和指標型別的資料,而且暫存器變數不能過多的使用,否則反而會降低運算速...