首先說明一下堆和棧,棧(英文名稱是stack)是系統自動分配空間的。而堆(英文名稱是heap)則是程式設計師根據需要自己申請的空間。
堆上的記憶體空間是程式執行時維護的,棧是在編譯時就確定的。 所以,我們可以int* p=new int[n],而不能int a[n](n為變數)。
儲存空間型別: 棧(stack): 自動分配和清除的變數.如:區域性變數和函式引數等
堆(heap): new得出來的空間。
全域性/靜態儲存區:儲存全域性變數和靜態變數。
常量儲存區:儲存常量,不可以修改。
儲存空間的排布由作業系統決定(依賴於作業系統怎麼規定自己的可執行檔案的格式)
型別 補充
作用域
存在期
初始化
外部定義(函式外面)
全域性變數(外部變數)
為了後定義先使用:可用extern外部變數說明. 全域性
全程一次初始化
靜態外部變數
檔案 全程
外部陣列
全域性 全程
靜態函式
檔案 n/a
n/a
普通函式
全域性 n/a
n/a
內部定義(函式裡面)
靜態區域性陣列
區域性 全程
一次初始化
靜態區域性變數
在函式外只能賦一次值 區域性
全程一次初始化
普通區域性變數(自動變數)
區域性 區域性
c89 中的變數生存期,作用域,儲存位置總結
作用域 變數名有效的範圍 存在期 變數在程式中存在的時期 儲存方式 auto,register,extern,static 儲存空間型別 棧 stack 自動分配和清除的變數.如 區域性變數和函式引數等 堆 heap 由malloc等函式分配的空間 在c 裡這叫自由儲存區,而把new得來的空間叫做堆...
作用域與生存期
1.作用域 作用域指識別符號能夠被使用的範圍 只有在作用域內識別符號才可以被使用。在此階段針對編譯和鏈結過程。1 函式中定義的識別符號,包括形參和函式體中定義的區域性變數,作用域都在函式內,也稱作函式域。2 檔案作用域也稱全域性作用域。定義在所有函式之外的識別符號,具有檔案作用域,作用域為從定義處到...
C 中的生存期和作用域
生存期和作用域,究竟有什麼樣的關係呢?先解釋一下生存期吧。乙個程序對應的記憶體空間中,包含5種不同的資料區。按照記憶體中從低到高的順序,分別為 棧 堆 bss段 資料段和 段。棧 存放程式臨時建立的區域性物件。一般vc 6.0生成的可執行檔案只有1mib多的棧。堆 存放程序執行中被動態分配的記憶體段...