記憶體分配模式 靜態區 堆 棧

2021-05-21 22:39:28 字數 866 閱讀 1776

靜態區:儲存自動全域性變數和static變數(包括static全域性和區域性變數)。靜態區的內容在總個程式的生命週期內都存在,由編譯器在編譯的時候分配。

:由malloc系列函式或new操作符分配的記憶體,其生命週期由free或delete決定。在沒有釋放之前一直存在,直到程式結束,其特點是使用靈活,空間比較大,但容易出錯

:儲存區域性變數,棧上的內容只在函式的範圍內存在,當函式執行結束,這些內容也會自動被銷毀,其特點是效率高,但空間大小有限

例子;code:

#include 

int a = 0;//全域性初始化區 

char *p1; //全域性未初始化區 

main()    

再來看下各個生命週期:

外部變數=全域性變數

作用域:從定義處到原始檔結束

生命週期:從程式執行開始-程式執行結束

區域性變數

作用域:函式(復合語句)內部

生命週期:從函式呼叫開始-函式呼叫結束

static區域性變數

作用域:同區域性變數

生命週期:同外部變數

static全域性變數

作用域:被編譯檔案的剩餘部分

生命週期:同全域性變數

當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。

外部變數(extern)

在某個程式檔案模組中定義,該變數可以在整個程式的所有檔案模組中起作用。只是在其他模組中使用的時候,必須要把他宣告稱外部變數,即在前面加extern。

記憶體分配中的堆 棧 靜態區 唯讀區

記憶體中的棧區處於相對較高的位址以位址的增長方向為上的話,棧位址是向下增長的,棧中分配區域性變數空間,堆區是向上增長的用於分配程式設計師申請的記憶體空間。另外還有靜態區是分配靜態變數,全域性變數空間的 唯讀區是分配常量和程式 空間的 以及其他一些分割槽。對於常量,在實際情況中,是會復用的,比如變數a...

C 記憶體 堆疊靜態儲存區

學習c 如果不了解記憶體分配是一件非常可悲的事情。而且,可以這樣講,乙個c 程式設計師無法掌握記憶體 無法了解記憶體,是不能夠成為乙個合格的c 程式設計師的。一 記憶體基本構成 可程式設計內存在基本上分為這樣的幾大部分 靜態儲存區 堆區和棧區。他們的功能不同,對他們使用方式也就不同。靜態儲存區 內存...

記憶體區 堆疊

一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其 操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os回 收 注意它...