C語言 全域性?靜態全域性?區域性?靜態區域性

2021-10-05 10:14:27 字數 398 閱讀 5027

全域性變數:儲存在靜態區,程式執行的整個過程一直占用記憶體。所有檔案所有函式都可以使用(使用extern宣告),比較靈活。正是因為多個地方都可讀可寫,是乙個很危險的事,因為不知道某個時刻誰會將它改變,而且導致程式不方便移植。適當使用全域性變數還是有很多好處的,只是不推薦濫用全域性變數;

區域性變數:除了加static宣告的變數,都是存在棧中,由系統自動分配和釋放,但棧的可用記憶體有限,一旦函式內部定義成千上萬個變數或陣列就有可能導致棧溢位;

靜態區域性變數:儲存在靜態區,也會一直占用記憶體,靜態區域性變數只能在本函式中使用,且它會有」記憶「,不管是靜態全域性還是靜態區域性,都是在main函式執行之前進行唯一的一次初始化。

c程式的記憶體分布可以參考文章:

關於區域性變數 全域性變數 區域性靜態變數 全域性靜態變數

從作用域看 1 全域性變數 全域性作用域 全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。其他不包含全域性變數定義的原始檔需要用extern 關鍵字再次宣告這個全域性變數。2 靜態區域性變數 區域性作用域 自從第一次被初始化直到程式執行結束都一直存在,它和全域性變數的區別在於全域性變數對...

C 之全域性物件,區域性物件,靜態區域性物件

先說兩個概念 作用域 scope 和生命週期 lifetime 作用域 名字的作用域指的是知道該名字的程式文字區域 生命週期 物件的生命週期指在程式執行過程中物件存在的時間 全域性物件,顧名思義是全域性的物件,其作用域是整個程式文字,其物件的宣告週期是整個程式的執行過程 區域性物件 一般說的區域性變...

全域性物件和全域性靜態 區域性靜態析構順序

多久不用c 好多東西都模糊了,最近跟人討論全域性和靜態的析構順序,之前總覺得這個根據編譯器來決定的,其實還是有一定的說法的。記錄一下 class a destructor delete a class b destructor 區域性變數 class d destructor 區域性靜態變數 cla...