當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > C語言存儲類型
一:c語言存儲類型在c語言中起著重要的作用,具體的分為以下4種
1. 自動變量(auto):函數(shù)中所有的非靜態(tài)局部變量
2. 靜態(tài)變量(static):在變量前加上static關(guān)鍵字的變量。
3. 外部變量(extern):一般用作全局變量作用域的擴(kuò)展
4. 寄存器類型(register):一般經(jīng)常被使用的的變量(如某一變量需要計算幾千次)可以設(shè)置成寄存器變量,register變量會被存儲在寄存器中,計算速度遠(yuǎn)快于存在內(nèi)存中的非register變量。
二:數(shù)據(jù)的存儲類型可以改變其作用域和周期
1. 作用域來分析:
變量的作用域不同,本質(zhì)上是由于變量的存儲類型不同,其中自動類型和寄存器的變量屬于動態(tài)存儲方式;而外部類型和靜態(tài)類型屬于靜態(tài)存儲方式
2、從生存時間的角度來看:
自動變量:隨著函數(shù)的進(jìn)棧和出棧而創(chuàng)建和銷毀
靜態(tài)變量:長期存在靜態(tài)存儲區(qū),直到程序結(jié)束
外部變量:長期存在靜態(tài)存儲區(qū),直到程序結(jié)束
寄存器變量:離開函數(shù)值就會消失
三:具體分析其特點:
1, auto只能用來標(biāo)識局部變量的存儲類型,對于局部變量,auto是默認(rèn)的存儲類型,auto標(biāo)識的變量存儲在棧區(qū)中,一般情況下我們?nèi)笔〔粚懀J(rèn)為自動類型存儲。
2, extern用來聲明在當(dāng)前文件中引用在當(dāng)前項目中的其它文件中定義的全局變量。如果全局變量未被初始化,那么將被存在bss區(qū)中,且在編譯時,自動將其值賦值為0,如果已經(jīng)被初始化,那么就被存在數(shù)據(jù)區(qū)中。全局變量,不管是否被初始化,其生命周期都是整個程序運行過程中,為了節(jié)省內(nèi)存空間,在當(dāng)前文件中使用extern來聲明其它文件中定義的全局變量時,就不會再為其分配內(nèi)存空間。
3, register的變量在由內(nèi)存調(diào)入到CPU寄存器后,則在CPU的寄存器中,因此訪問register變量將在很大程度上提高效率,因為省去指令周期。
4, static的變量,無論是全局的還是局部的,都存儲在數(shù)據(jù)區(qū)中,其生命周期為整個程序,如果是靜態(tài)局部變量,其作用域為一對{}內(nèi),如果是靜態(tài)全局變量,其作用域為當(dāng)前文件。靜態(tài)變量如果沒有被初始化,則自動初始化為0。靜態(tài)變量只能夠初始化一次。
四:register不同于其他三種的特性
變量定義是指定為寄存器類型,實質(zhì)不一定是寄存器,這主要看cpu,若在cpu中的寄存器數(shù)量足夠多時,則定義的變量就是保存在寄存器當(dāng)中的。