c語言中的儲存型別有auto, extern, register, static 這四種,儲存型別說明了該變數要在程序的哪一個段中分配記憶體空間,可以為變數分配記憶體儲存空間的有資料區、BBS區、棧區、堆區。
1. auto儲存型別
auto只能用來標識區域性變數的儲存型別,對於區域性變數,auto是預設的儲存型別,不需要顯示的指定。因此,auto標識的變數儲存在棧區中。
2. extern儲存型別
extern用來宣告在當前檔案中引用在當前專案中的其它檔案中定義的全域性變數。如果全域性變數未被初始化,那麼將被存在BBS區中,且在編譯時,自動將其值賦值為0,如果已經被初始化,那麼就被存在資料區中。全域性變數,不管是否被初始化,其生命週期都是整個程式執行過程中,為了節省記憶體空間,在當前檔案中使用extern來宣告其它檔案中定義的全域性變數時,就不會再為其分配記憶體空間。
3. register儲存型別
宣告為register的變數在由記憶體調入到CPU暫存器後,則常駐在CPU的暫存器中,因此訪問register變數將在很大程度上提高效率,因為省去了變數由記憶體調入到暫存器過程中的好幾個指令週期。
4. static儲存型別
被宣告為靜態型別的變數,無論是全域性的還是區域性的,都儲存在資料區中,其生命週期為整個程式,如果是靜態區域性變數,其作用域為一對{}內,如果是靜態全域性變數,其作用域為當前檔案。靜態變數如果沒有被初始化,則自動初始化為0。靜態變數只能夠初始化一次。
c語言中的儲存型別有auto, extern, register, static 這四種,儲存型別說明了該變數要在程序的哪一個段中分配記憶體空間,可以為變數分配記憶體儲存空間的有資料區、BBS區、棧區、堆區。
1. auto儲存型別
auto只能用來標識區域性變數的儲存型別,對於區域性變數,auto是預設的儲存型別,不需要顯示的指定。因此,auto標識的變數儲存在棧區中。
2. extern儲存型別
extern用來宣告在當前檔案中引用在當前專案中的其它檔案中定義的全域性變數。如果全域性變數未被初始化,那麼將被存在BBS區中,且在編譯時,自動將其值賦值為0,如果已經被初始化,那麼就被存在資料區中。全域性變數,不管是否被初始化,其生命週期都是整個程式執行過程中,為了節省記憶體空間,在當前檔案中使用extern來宣告其它檔案中定義的全域性變數時,就不會再為其分配記憶體空間。
3. register儲存型別
宣告為register的變數在由記憶體調入到CPU暫存器後,則常駐在CPU的暫存器中,因此訪問register變數將在很大程度上提高效率,因為省去了變數由記憶體調入到暫存器過程中的好幾個指令週期。
4. static儲存型別
被宣告為靜態型別的變數,無論是全域性的還是區域性的,都儲存在資料區中,其生命週期為整個程式,如果是靜態區域性變數,其作用域為一對{}內,如果是靜態全域性變數,其作用域為當前檔案。靜態變數如果沒有被初始化,則自動初始化為0。靜態變數只能夠初始化一次。