data段在編譯時就已確定大小,在程式一執行就分配空間;棧中的資料在執行時才分配空間。
首先型別:
靜態變數:都不再棧中管理,編譯時在靜態儲存區分配空間。
非靜態變數:除全域性變數外,都在棧中管理,執行時分配記憶體。
作用域:
全域性變數:都不再棧中管理,編譯時在靜態儲存區分配空間。在程式執行結束前都有效。
區域性變數:除靜態區域性變數外,都在棧中管理,執行時分配記憶體。在相應函式中有效。除靜態區域性變數,其他區域性變數在函式結束隨著相應棧幀消失而消失。
在不在棧中管理的變數:
有初始化:儲存在.data段中。
無初始化:儲存在.bss段中。
也就是說,初始化的---全域性變數(自動,靜態)、靜態區域性變數,這些分配在data段裡的資料在編譯時就獲得儲存空間了。
未初始化的全域性變數(自動,靜態)、靜態區域性變數編譯時分配在bss段(佔位符,bss段大小),編譯器自動賦0。(編譯器並不分配空間,只是記錄資料所需空間大小)(此段占用記憶體空間(執行時),不占用可執行檔案空間即磁碟上空間)
而區域性變數(非靜態)在執行時才在棧裡分配空間。
全域性 區域性變數
一 全域性變數 1.全域性變數 定義在函式外的變數 1 普通全域性變數 int g a 2 靜態全域性變數 static int g a 2.如何引用全域性變數?引用全域性變數加extern 1 extern int g b 2 extern int min int a,int b 二 區域性變數 ...
全域性 區域性 變數
在def中,我們可以定義乙個區域性變數,這個變數a只能在這個功能fun中有效,出了這個功能,a這個變數就不是那個區域性的a.def fun a 10 print a return a 100 print fun 10 110 def fun a 10 區域性變數 return a 100 print...
c語言全域性變數和區域性變數
c語言全域性變數和區域性變數 1 區域性變數能否和全域性變數重名?答 能,區域性會遮蔽全域性。要用全域性變數,需要使用 注 在linux中用gcc編譯可能會出錯,需要用g 編譯 區域性變數可以與全域性變 量同名,在函式內引用這個變數時,會用到同名的區域性變數,而不會用到全域性變數。對於有些編譯器而言...