當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 變量的存儲類型(storage class)
對于變量的存儲類型,前面遇到過一些疑惑,再簡單的在這里說一下。存儲類型是指存儲變量值的內(nèi)存類型,它用來決定存儲空間的大小。變量的存儲類型決定著變量的存儲器和作用域。有三個地方可以用于存儲變量:普通內(nèi)存、運行時堆棧、硬件寄存器。在這三個地方存儲的變量具有不同的特性。
本文引用地址://www.bsfkj.cn/emb/Column/7300.html
存儲期:變量占據(jù)內(nèi)存的時間期限-----與函數(shù)共存、與程序共存。
作用域:變量出現(xiàn)的有效區(qū)域-----函數(shù)內(nèi)、本文件內(nèi)、多文件內(nèi)。
自動類型:auto為存儲類說明符,可以說明一個變量為自動變量。在一個代碼塊內(nèi)聲明的變量,無論有沒有存儲類修飾符auto,都屬于自動存儲類。該類具有自動存儲時期、代碼塊的作用域和空鏈接(no linkage)。如未初始化,它的值是不確定的。
寄存器存儲:關(guān)鍵字register可以用于自動變量的聲明,提示他們應(yīng)該存儲于機器的硬件寄存器而不是內(nèi)存中,這類變量稱為寄存器變量。通常,寄存器變量比存儲于內(nèi)存的變量訪問起來效率更高。但是,編譯器并不一定要理財register關(guān)鍵字,如果有太多的變量被聲明為register,它只選取前幾個實際存儲于寄存器中,其余的就按普通自動比那輛處理。如果一個編譯器自己具有一套寄存器優(yōu)化方法,它可能忽略register關(guān)鍵字。
靜態(tài)存儲:對于在代碼塊內(nèi)部聲明的變量,如果給它加上關(guān)鍵字static,可以使他的存儲類型從自動變?yōu)殪o態(tài)。具有靜態(tài)存儲類型的變量在整個程序執(zhí)行過程中一直存在,而不僅僅在聲明它的代碼塊的執(zhí)行時存在。注意,修改變量的存儲類型并不標(biāo)示修改該變量的作用域,它任然只能在該代碼塊內(nèi)部按名字訪問。函數(shù)的形式參數(shù)不能聲明
變量的缺省存儲類型:這取決于它的聲明位置。1、凡是在任何代碼塊之外聲明的變量(全局變量)總是存儲于靜態(tài)內(nèi)存中,也就是不屬于堆棧的內(nèi)存,這類變量成為靜態(tài)變量。對于這類變量,你無法為他們制定其他存儲類型。2、而在代碼塊內(nèi)部聲明的變量(局部變量)的缺省存儲類型時是自動的(automatic),也就是說他存儲于堆棧中,成為自動變量。有一個關(guān)鍵字auto就是用修飾這種存儲類型的,但它極少使用。
內(nèi)容先講這些,自己碰到的問題,也希望能對大家有所幫助!