c 記憶體分割槽

2021-09-11 03:41:58 字數 779 閱讀 7392

堆:由程式設計師手動分配和釋放,完全不同於資料結構中的堆,分配方式類似鍊錶。由malloc(c語言)或new(c++)來分配,free(c語言)和delete(c++)釋放。若程式設計師不釋放,程式結束時由系統釋放。

棧:由編譯器自動分配和釋放的,存放函式的引數值、區域性變數的值等。操作方式類似資料結構的棧。

全域性(靜態)儲存區:存放全域性變數和靜態變數。包括data段(全域性初始化區)和bss段(全域性未初始化區)。其中,初始化的全域性變數和靜態變數存放在data段,未初始化的全域性變數和未初始化的靜態變數存放在bss段。程式結束後由系統釋放。 其中bss段的特點是:在程式執行之前bss段會自動清零。所以,未初始化的全域性變數和靜態變數在程式執行之前已經成0了。

文字常量區:常量字串就是放在這裡的。程式結束後由系統釋放。

程式**區:存放函式體的二進位制**。

int k = 1;

void main(){

int i = 1;

char *j;

static int m =1;

char *n = "hello";

/*變數n位於棧上,其內容為一位址,指向位於文字常量區的「hello」,此時「hello「在記憶體中只有乙份拷貝;

而語句」char a = "hello";"則不同,a是乙個位於棧上的有6個元素(含字串末尾的空字元)的陣列,

並將「hello」拷貝到它所佔的記憶體中,此時「hello」有兩份拷貝*/

j = (char*)malloc(2);

free(j);//及時釋放

C 記憶體分割槽

前言 最近正在學習有關static的知識,發覺對c 的記憶體分割槽不是很了解,上網查了很多資料,遂將這幾天的學習筆記進行了簡單整理,發表在這裡 棧區 stack 主要用來存放函式的引數以及區域性變數。棧區由系統進行記憶體管理,在函式完成執行時,系統會自行釋放棧區的記憶體,而不需要使用者參與管理。整個...

C 記憶體分割槽

程式編譯後生成的二進位制檔案放在記憶體中的 區 全域性變數 函式外宣告的變數 靜態區域性變數 static修飾的變數 常量字串常量 hello world const 全域性變數 全域性常量 note const修飾的區域性變數不在全域性區 且區域性變數也不在全域性區 區域性變數 函式引數 存放在棧...

C 記憶體分割槽

系統執行時不能所有資料都讀取到cpu暫存器,所以需要有快取,快取不夠用了所以有多級快取。快取的儲存器畢竟還是相對昂貴的,所以還有記憶體 也叫外存 但是資料在記憶體中的是怎樣存放,這又是乙個問題。首先從位元組層面看 資訊在計算機肯定是0 1的bit位元位形式儲存,習慣是8bit作為乙個位元組作為乙個有...