堆疊的詳解

2021-06-10 18:16:33 字數 721 閱讀 4545

一,程式占用的記憶體分為五個部分:

1.棧區  由編譯器自動分配,儲存函式的引數值以及區域性變數,類似於資料結構 棧

2.堆區 由程式設計師申請分配。

3.全域性區即靜態區 存放全域性變數以及靜態變數

4.常量區 常量字串等

5.程式**區 存放函式體的二進位制** 

舉例:

二, 記憶體操作區別

案例1: 靜態區和棧區

char* p = 「hello world1」;

char a = 「hello world2」;

p[2] = 『a』;

a[2] = 『a』;

char* p1 = 「hello world1」;

此**有錯。此處的變數指標p p1 以及陣列a都放在棧區,而資料「hello world2」與「hello world1」放在不同區域,前者是棧區後者為堆區。此處p[2]可以訪問資料即為字母l,但不能修改,所以p[2]='a';表示式會報錯。

案例二:堆區和棧區

char* f1()

char* f2()

兩者中指標變數 p 都是臨時變數,函式呼叫結束後便會釋放掉。但是後者因為人為開闢了一段空間,故而函式呼叫完後,只要所開闢的空間的首位址還儲存,就可以訪問此空間中的資料。堆開闢的空間全域性可以共享。

void f()

堆 棧的詳解

堆 棧的詳解 堆 順序隨意 棧 先進後出 堆和棧的區別 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧 2 堆區 heap 一般由程式設計師分配釋放,...

c 堆疊詳解

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

C C 堆疊詳解

在計算機領域,堆疊是乙個不容忽視的概念,我們編寫的c語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看帖遇到...