C C 區域性靜態變數

2021-07-03 18:52:58 字數 598 閱讀 3476

對於乙個完整的程式,在記憶體中的分布情況如下。

**區全域性資料區

堆區棧區

**區存放程式編譯後的可執行**

一般程式的由new產生的動態資料存放在堆區

程式內部的自動變數存放在棧區。

自動變數一般會隨著函式的退出而釋放空間。

靜態資料(即使是函式內部的靜態區域性變數)也存放在全域性資料區,

全域性資料區的資料並不會因為函式的退出而釋放空間,

靜態區域性變數:

靜態區域性變數儲存在全域性資料區,而不是儲存在棧中,每次的值保持到下一次呼叫,直到下次賦新值。

該變數在全域性資料區內分配記憶體;靜態區域性變數在程式執行到該物件的宣告處時被首次初始化,即以後的函式呼叫不再進

行初始化(這一點非常的重要)

靜態區域性變數一般在宣告處初始化,如果沒有顯式初始化,會被程式自動初始化為0;它始終駐留在全域性資料區,直到程

序執行結束。但其作用域為區域性作用域,當定義它的函式或語句塊結束時,其作用域隨之結束;

靜態函式:

主要是用來訪問靜態成員,不能直接訪問類的非靜態成員;靜態成員函式主要為了呼叫方便,不需要生成物件就能呼叫。

非靜態函式可以訪問靜態成員函式和靜態資料成員。

區域性靜態變數

全域性變數,區域性靜態變數,全域性靜態變數均儲存在靜態儲存區,區域性變數儲存在棧上,而new出來的變數則儲存在堆裡。區域性靜態變數具有區域性作用域,它只被初始化一次,到程式結束前都一直存在,在自身函式體內是可見的,在函式體外是不可見的。而區域性變數只是在函式體內存在,函式結束時消失 全域性變數則是在...

C C 靜態變數

1 靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。2 靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同 即只能在定義該變數的函式內使用該變數。退出該函式後,儘管該變數還 繼續存在,但不能...

區域性變數,區域性靜態變數,全域性變數,全域性靜態變數分別

c 記憶體到底分幾個區?一 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。3 全域性...