C 靜態全域性變數與普通全域性變數

2021-07-04 09:48:06 字數 696 閱讀 6932

一、儲存區域:

1、棧:由編譯器在需要的時候分配,在不需要的時候自動清除的變數的儲存區域。通常儲存區域性變數,函式引數。

2、堆:由new分配的記憶體塊,需要手動釋放。如果程式設計師沒有手動釋放,在程式執行結束後,作業系統自動**。

3、自由儲存區:由malloc等分配的記憶體塊,與堆相似,用free來釋放。

4、全域性/靜態儲存區:用來存放全域性變數和靜態變數。在c中,全域性變數區分初始化的和未初始化的,在c++中不再區分,被分配在同一塊記憶體區中。

5、常量儲存區:比較特殊的儲存區,用來存放常量,不允許修改。

二、普通全域性變數與靜態全域性變數的存放位置

全域性變數、靜態全域性變數、靜態區域性變數都存放在全域性/靜態儲存區中。(即存放位置相同)。

三、普通全域性變數與靜態全域性變數的作用域

1、全域性變數:全域性變數具有全域性作用域(檔案作用域),通常在整個工程中有效,定義在乙個檔案中,在其他檔案中使用extern宣告即可使用。

2、靜態全域性變數:靜態全域性變數同樣具有全域性作用域,但是靜態全域性變數智慧型作用在定義該變數的檔案中,即使使用extern宣告也不行。

補充:20150819

四、靜態區域性變數

靜態區域性變數跟區域性變數一樣,也具有區域性作用域,即在定義的函式體外部無法訪問。與普通區域性變數不同的是,靜態區域性變數跟全域性變數和全域性靜態變數一樣,儲存在靜態儲存區,但只能被初始化一次,初始化完成後直到程式結束一直存在。

c 全域性變數 靜態全域性變數

全域性變數是靜態儲存方式,靜態全域性變數也是靜態儲存方式,這兩者在儲存方式上並無不同。區別 雖在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,靜態全域性變數在各個原始檔中都是有效的。靜態區域性變數則限制了其作用域,只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能...

static全域性變數與普通的全域性變數

一 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是...

全域性變數和靜態全域性變數

全域性變數和區域性變數是從變數的作用域的角度劃分。靜態變數和動態變數是從變數的記憶體分配的角度劃分。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同,區別在於非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原...