寄存器變量:
變量一般情況下都存在於內存中。如果程序需要使用某個變量,CPU的控制器將從內存中取得變量值后會將其暫存在寄存器中。寄存器就是CPU自己的"小內存",它的特點是"容量小、速度快"。正常情況下,編程語言本身無法直接操作寄存器。但某些時候,一些變量可能會被頻繁地使用,這時,頻繁地對內存進行存取操作就會耗費較多的時間;如果我們能夠有效地利用CPU的寄存器,就會顯著提升程序的運行效率。
C語言中使用關鍵字register來聲明局部變量為寄存器變量。寄存器變量的值會被存放在CPU的寄存器中,每當需要使用它們時,CPU就可以直接使用,而無須再通過控制器從內存中獲取。由於操作寄存器的速度遠高於操作內存,所以正確地使用寄存器變量能夠有效地提高程序運行效率。register型變量常被用於作為循環控制變量,這能充分體現它的高速特點。
但是,我們必須明確只 有局部自動變量和形式參數才能夠被定義為寄存器變量,全局變量和局部靜態變量都不能被定義為寄存器變量。而且,一個計算機中寄存器數量是有限的,一般為2 到3個,因此寄存器變量的數量不能太多。對於在一個函數中說明的多於2到3個的寄存器變量,C編譯程序會自動地將寄存器變量變為自動變量。 受硬件寄存器長度的限制,寄存器變量只能是char、int或指針型,而不能使其他復雜數據類型。由於register變量使用的是硬件CPU中的寄存器,寄存器變量無地址,所以不能使用取地址運算符"&"求寄存器變量的地址。
以下為一個寄存器變量的聲明:
register int variable;
當今的優化編譯系統能夠識別使用頻繁的變量,從而自動地將這些變量放在寄存器中,而不需要程序設計者指定,因此,實際上用register聲明變量是不必要的