對於乙個完整的程式,在記憶體中的分布情況如下圖:
**區//low address
全域性資料區
堆區
棧區//high address
一般程式把新產生的動態資料存放在堆區,函式內部的自動變數存放在棧區。自動變數一般會隨著函式的退出而釋放空間,靜態資料(即使是函式內部的靜態區域性變數)也存放在全域性資料區。全域性資料區的資料並不會因為函式的退出而釋放空間。
四種變數主要從以下兩點區分
一、生存期,即儲存方式
全域性變數、靜態全域性變數、靜態區域性變數都存放在記憶體的靜態儲存區域;
區域性變數存放在記憶體的棧區。
二、作用域
全域性變數在整個工程檔案內都有效;
靜態全域性變數只在定義它的檔案內有效;
靜態區域性變數只在定義它的函式內有效,並且程式僅分配一次記憶體,函式返回後,該變數不會消失;
區域性變數在定義它的函式內有效,但是函式返回後失效。
從以上分析可以看出,把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。這句話應該錯了,應該是放在常量資料段 全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用...
全域性變數 靜態全域性變數 靜態區域性變數 區域性變數
全域性和靜態變數都在堆裡。全域性變數的作用範圍是整個程式 如果程式是多個檔案,必須在其他的檔案中說明 靜態變數的作用範圍要看靜態變數的位置,如果在函式裡,則作用範圍 就是這個函式。靜態全域性變數,只在本檔案可以用,雖然整個程式包含多個檔案,但靜態全域性變數只能用在定義它的那個檔案裡,卻不能用在程式中...
全域性變數,靜態全域性變數,靜態區域性變數,區域性變數
1.從作用域看 c 變數根據定義的位置的不同的生命週期,具有不同的作用域,作用域可分為6種 全域性作用域,區域性作用域,語句作用域,類作用域,命名空間作用域和檔案作用域。1 全域性變數具有全域性作用域。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包含全域性變數定義的原始檔...