靜態變量、自動變量與寄存器變量的存儲_第1頁
靜態變量、自動變量與寄存器變量的存儲_第2頁
靜態變量、自動變量與寄存器變量的存儲_第3頁
靜態變量、自動變量與寄存器變量的存儲_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

靜態變量、自動變量與寄存器變量的存儲什么是寄存器?什么是寄存器變量?寄存器是中央處理器內的組成部分。寄存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、數據和位址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計數器(PC)。在中央處理器的算術及邏輯部件中,包含的寄存器有累加器(ACC)。寄存器是內存階層中的最頂端,也是系統獲得操作資料的最快速途徑。寄存器通常都是以他們可以保存的位元數量來估量,舉例來說,一個“8位元寄存器”或“32位元寄存器”。寄存器現在都以寄存器檔案的方式來實作,但是他們也可能使用單獨的正反器、高速的核心內存、薄膜內存以及在數種機器上的其他方式來實作出來。寄存器通常都用來意指由一個指令之輸出或輸入可以直接索引到的暫存器群組。更適當的是稱他們為“架構寄存器”。寄存器是CPU內部的元件,寄存器擁有非常高的讀寫速度,所以在寄存器之間的數據傳送非常快。register[寄存器]變量告訴編譯器相關的變量應該改量存儲在高速度的寄存器中。使用register存儲類型的目的一般是為了提高執行速度,但是,register聲明只是向編譯器所提出的“建議”,并非強制要求。寄存器型變量register限定詞通知編譯器--程序中的變量將頻繁使用。它的意思是建議編譯器將程序中用register限定的變量放置在計算機的內部寄存其中,這樣可能得到更小更快的程序。但是,編譯器將根據實際情況考慮是否采納該建議--是否將register變量處理為寄存器變量最終決定權還是在編譯器。如下使用register:registerintx;/*x必須是內部變量*/registercharch;/*ch必須是內部變量*/register只能用于限定自動型變量和函數的形式參數。也就是說register只對內部變量起作用,而且只能限定內部非靜態型變量,不能限定內部靜態型變量。register也可以應用于形式參數,格式如下:f(registerunsignedm,registerlongn)/*register應用于形式參數*/{registerinti;/*register應用于內部變量*/}在傳統C中,register變量的使用有諸多限制,它決定于硬件的實現方式。在每一個函數中只有少數幾個變量可以保存在寄存器中,而且也只有特定的類型才行。過量的register變量看起來是無害的,但是超量以后,編譯器將忽略新的register變量。另外不管register變量實際上是否被編譯器設置為寄存器型變量,都不可能取得該變量的地址。寄存器型變量的類型和數量的多少隨計算機不同而異。register變量一般只能夠設置幾個。傳統C的register類型限定于char、int等類型。像float、double、數組等是不可以設定為register型變量的。但是,在最新C99標準中,任何類型都可以定義為register變量,register聲明的目的只是告訴編譯器以盡快的速度處理該變量,編譯器不見得非把它處理為register變量。靜態變量、自動變量與寄存器變量的存儲一、我們聲明的變量有幾類?變量的存儲位置與變量的類型有關,這里變量的類型不是int、float之類的類型,而是分為三類:靜態變量、自動變量和寄存器變量。然而,變量到底屬于這三類中的哪一類是根據變量在源文件中的聲明位置和聲明方式所決定的。二、這三類變量分別是怎么存儲的(存儲類型)?變量的存儲類型(storageclass)是指存儲變量值的內存類型。變量的存儲類型決定變量何時創建、何時銷毀以及它的值將保持多久。有三個地方可以用于存儲變量:靜態內存、運行時堆棧、硬件寄存器。在這三個地方存儲的變量具有不同的特性。(1)存儲在靜態內存的變量凡是在任何代碼塊之外聲明的變量總是存儲于靜態內存中,也就是不屬于堆棧的內存,這類變量也叫靜態(static)變量。對于這類變量,你無法為它們指定其他存儲類型。靜態變量的生存期:靜態變量在程序運行之前創建,在整個程序執行期間始終存在。(2)存儲在堆棧內存的變量在代碼塊內部聲明的變量的缺省存儲類型是自動的(automatic),也就是說它存儲于堆棧中,這類變量叫自動(auto)變量,也叫局部變量。有一個關鍵字auto就是用于修飾這種類型的,但它極少使用,因為代碼塊中的變量缺省就是自動變量。自動變量的生存期:在程序執行到聲明自動變量的代碼塊時,自動變量才被創建,當程序的執行流離開該代碼塊時,這些自動變量便自行銷毀。如果該代碼塊被執行多次,例如一個函數被執行多次,其內部的自動變量也就被重新創建多次。而且每次被創建的內存地址可能不同。(3)代碼塊中的靜態變量對于在代碼塊內部聲明的變量,缺省為自動變量,但如果給它加上關鍵字static,可以使它的存儲類型從自動變為靜態。這類變量也叫做靜態局部變量,存儲在靜態內存中。靜態局部變量的生存期:代碼塊首次執行時創建該變量,直到整個程序結束。注意:雖然存儲類型發生變化,但它的作用域并為改變,它仍然只能在該代碼塊內部通過變量名訪問。函數的形式參數不能聲明為靜態,因為實參總是在堆棧中傳遞給函數,用于支持遞歸。(4)在硬件寄存器中的變量關鍵字register可以用于自動變量的聲明,提示它們應該存儲于機器的硬件寄存器而不是內存中,這類變量稱為寄存器變量。通常,寄存器變量比存儲于內存的變量訪問起來效率更高。注意:聲明為寄存器變量只是一種美好的愿望^_^,因為編譯器不一定會理你!因為寄存器就那么幾個,要是太多變量被聲明為reg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論