- 編寫高質(zhì)量代碼:改善C程序代碼的125個(gè)建議
- 馬偉 著
- 619字
- 2019-01-01 01:33:14
建議8:正確地選擇變量的存儲(chǔ)類型
在計(jì)算機(jī)中,保存變量當(dāng)前值的存儲(chǔ)單元有兩類:一類是內(nèi)存,另一類是CPU的寄存器。變量的存儲(chǔ)類型關(guān)系到變量的存儲(chǔ)位置,在C語(yǔ)言中,為變量提供了4種存儲(chǔ)類型:auto(自動(dòng))型、static(靜態(tài))型、register(寄存器)型和extern(外部)型。它們關(guān)系到變量在內(nèi)存中的存放位置,由此決定了變量的保留時(shí)間和變量的作用范圍。
變量的保留時(shí)間又稱為生存期,從時(shí)間的角度來(lái)看,可將變量分為靜態(tài)存儲(chǔ)和動(dòng)態(tài)存儲(chǔ)兩種情況。靜態(tài)存儲(chǔ)是指變量存儲(chǔ)在內(nèi)存的靜態(tài)存儲(chǔ)區(qū)中,在編譯時(shí)就為它分配了存儲(chǔ)空間,在整個(gè)程序的運(yùn)行期間,該變量占有固定的存儲(chǔ)單元,程序執(zhí)行結(jié)束后,這部分空間才會(huì)釋放,變量的值在整個(gè)程序中始終存在;動(dòng)態(tài)存儲(chǔ)是指變量存儲(chǔ)在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中,在程序的運(yùn)行過(guò)程中,只有當(dāng)變量所在的函數(shù)被調(diào)用時(shí),編譯系統(tǒng)才臨時(shí)為該變量分配一段內(nèi)存單元,函數(shù)調(diào)用結(jié)束時(shí),該變量空間就會(huì)釋放,變量的值只在函數(shù)調(diào)用期存在。
變量的作用范圍又稱為作用域,從空間角度來(lái)看,可以將變量分為局部變量和全局變量。局部變量是在一個(gè)函數(shù)或復(fù)合語(yǔ)句內(nèi)定義的變量,它僅在函數(shù)或復(fù)合語(yǔ)句內(nèi)有效,編譯時(shí),編譯系統(tǒng)不為局部變量分配內(nèi)存單元,而是在程序運(yùn)行過(guò)程中,當(dāng)局部變量所在的函數(shù)被調(diào)用時(shí),編譯系統(tǒng)才會(huì)根據(jù)需要臨時(shí)分配內(nèi)存,調(diào)用結(jié)束后,釋放空間;全局變量是在函數(shù)之外定義的變量,其作用范圍為從定義處開始到本文件結(jié)束,編譯時(shí),編譯系統(tǒng)會(huì)為其分配固定的內(nèi)存單元,在程序運(yùn)行的自始至終它都占用著固定的單元。
- Unreal Engine Physics Essentials
- FuelPHP Application Development Blueprints
- 程序員面試筆試寶典(第3版)
- SoapUI Cookbook
- 微服務(wù)與事件驅(qū)動(dòng)架構(gòu)
- 21天學(xué)通C++(第6版)
- JavaScript by Example
- Microsoft System Center Orchestrator 2012 R2 Essentials
- Node.js全程實(shí)例
- Android系統(tǒng)級(jí)深入開發(fā)
- Python全棧數(shù)據(jù)工程師養(yǎng)成攻略(視頻講解版)
- 黑莓(BlackBerry)開發(fā)從入門到精通
- Microsoft HoloLens By Example
- 零基礎(chǔ)學(xué)Java(第5版)
- Spring Boot 3:入門與應(yīng)用實(shí)戰(zhàn)