C語言學習:C語言存儲類型

一:c語言存儲類型在c語言中起著重要的作用,具體的分為以下4種

1.自動變數(auto):函數中所有的非靜態局部變數

2.靜態變數(static):在變數前加上static關鍵字的變數。

3.外部變數(extern):一般用作全局變數作用域的擴展

4.寄存器類型(register):一般經常被使用的的變數(如某一變數需要計算幾千次)可以設置成寄存器變數,register變數會被存儲在寄存器中,計算速度遠快於存在內存中的非register變數。

二:數據的存儲類型可以改變其作用域和周期

1.作用域來分析:

變數的作用域不同,本質上是由於變數的存儲類型不同,其中自動類型和寄存器的變數屬於動態存儲方式;而外部類型和靜態類型屬於靜態存儲方式

Advertisements

2、從生存時間的角度來看:

自動變數:隨著函數的進棧和出棧而創建和銷毀

靜態變數:長期存在靜態存儲區,直到程序結束

外部變數:長期存在靜態存儲區,直到程序結束

寄存器變數:離開函數值就會消失

三:具體分析其特點:

1,auto只能用來標識局部變數的存儲類型,對於局部變數,auto是默認的存儲類型,auto標識的變數存儲在棧區中,一般情況下我們預設不寫,默認為自動類型存儲。

2,extern用來聲明在當前文件中引用在當前項目中的其它文件中定義的全局變數。如果全局變數未被初始化,那麼將被存在bss區中,且在編譯時,自動將其值賦值為0,如果已經被初始化,那麼就被存在數據區中。全局變數,不管是否被初始化,其生命周期都是整個程序運行過程中,為了節省內存空間,在當前文件中使用extern來聲明其它文件中定義的全局變數時,就不會再為其分配內存空間。

Advertisements

3,register的變數在由內存調入到CPU寄存器后,則在CPU的寄存器中,因此訪問register變數將在很大程度上提高效率,因為省去指令周期。

4,static的變數,無論是全局的還是局部的,都存儲在數據區中,其生命周期為整個程序,如果是靜態局部變數,其作用域為一對{}內,如果是靜態全局變數,其作用域為當前文件。靜態變數如果沒有被初始化,則自動初始化為0。靜態變數只能夠初始化一次。

四:register不同於其他三種的特性

變數定義是指定為寄存器類型,實質不一定是寄存器,這主要看cpu,若在cpu中的寄存器數量足夠多時,則定義的變數就是保存在寄存器當中的。

內容來源:華清遠見嵌入式學院

http://cd.hqyj.com/

Advertisements

你可能會喜歡