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