一,程式占用的記憶體分為五個部分:
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語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看帖遇到...