靜態變數,靜態區域性變數的生存週期

2021-06-28 12:58:42 字數 544 閱讀 5466

首先要理解生存週期與作用域的區別:

生存週期: 變數從定義到銷毀的時間範圍。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷毀,除了靜態變數之外的區域性變數都存放於棧中。

作用域: 變數的可見**域(塊作用域,函式作用域,類作用域,程式全域性作用域)。

static變數是指靜態的變數,不管是在全域性還是區域性宣告的static變數都存放於程式的全域性變數區域,所以它的生命週期是從程式開始到程式結束。但是static變數的作用域並不等同於它的生存週期,它的作用域決定於它被定義的位置。可以認為static變數的作用域<=生存週期。

舉乙個區域性宣告的例子。在函式test中宣告靜態變數i:

void test()

區域性變數m存放在棧中,當test函式結束,m將被銷毀;靜態變數i不存放在棧中,而是存放於程式的全域性變數區域,因此隨著函式test的結束,它並不隨著出棧操作而被銷毀,它的生存週期存在於程式的整個執行期;然而m和i的作用域都僅存在於test函式中它們的定義之後,即test呼叫結束之後,m和i就不再可用,但是i仍存在於記憶體之中。

靜態變數,靜態區域性變數的生存週期

首先要理解生存週期與作用域的區別 生存週期 變數從定義到銷毀的時間範圍。存放在全域性資料區的變數的生存週期存在於整個程式執行期間,而存放在棧中的資料則隨著函式等的作用域結束導致出棧而銷毀,除了靜態變數之外的區域性變數都存放於棧中。作用域 變數的可見 域 塊作用域,函式作用域,類作用域,程式全域性作用...

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

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

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

變數可以分為全域性變數 靜態全域性變數 靜態區域性變數和區域性變數。按照儲存區分 全域性變數 靜態全域性變數和靜態區域性變數都存放在記憶體的全域性資料區,區域性變數存放在記憶體的棧區。按作用域分 全域性變數在整個工程檔案內都有效 靜態全域性變數只在定義它的檔案內有效 靜態區域性變數只在定義它的函式內...