static extern分析總結

2021-06-05 07:46:08 字數 575 閱讀 1908

一、c語言記憶體空間布局

下面是google上找的一張c記憶體布局圖,我先基於這張圖介紹下各個記憶體區域的情況

1、正文(**段):每個程式開始前,都有系統載入**指令到這裡,用於執行,當然都是機器碼

2、初始化的資料段:存放已經初始化的非自動變數,如全域性變數int i=0;等等

3、未初始化的資料段(bss):存放未初始化的非自動變數,如全域性變數int i;等等

4、堆:動態申請的區域,如malloc、calloc、realloc等產生的

5、棧:自動變數或函式呼叫資訊儲存的區域,如區域性變數int i;等等

最後,extern和static變數都是放在2、3所表示的區域,兩者還有個區別就是static你只能申明一次,為什麼?很顯然,因為由它修飾的變數只能在本檔案使用,故你如果申明時不初始化它自己會初始化自己為0,所以通常申明static時很多時候沒有認為初始化。可能還有人認為我說漏了auto和regester兩個修飾詞,這兩個通常有編譯器自動識別,編譯器至少這這一方面幹的比你出色~

看書雜記 static extern

一 函式中的區域性變數都是動態分配儲存空間的,資料儲存在動態儲存區中,函式呼叫結束後即消失,釋放儲存空間。若是希望函式中的區域性變數在呼叫結束後仍保留原值,也不釋放儲存單元,則可使用關鍵字static宣告區域性變數是靜態變數。函式編譯時在靜態儲存區分配儲存單元,函式呼叫結束後不釋放儲存單元,直到程式...

static,extern詳細用法

static c語言 static 的作用 1 全域性靜態變數 1 在全域性靜態區分配記憶體 2 如果沒有初始化,其預設值是0 3改變量在本檔案內從定義開始到檔案結束可見 2 區域性靜態變數 1 改變量在全域性靜態區分配記憶體 2 如果不顯示初始化,那麼將被初始化為0 3 它始終在全域性靜態區,直到...

作用域,變數(static,extern)

1.extern既可以在同檔案中使用也可以跨c檔案使用,在同檔案可以跨作用域。2.全域性變數 int a 初始化預設為0 區域性變數int a 初始化可能為隨機值,有些平台可能無法通過 如果加static預設為0 3.static既可以修飾全域性變數也可以修飾區域性變數 static區域性變數初始化...