C C 中區分棧和堆資料塊的原因

2021-09-26 22:55:14 字數 417 閱讀 6024

其實棧和堆本質相同。不同處是:棧資料塊的資料指標所有權是編譯器;堆資料塊的資料指標所有權是程式本身。

也就是說棧的資料指標移動是在原始碼編譯時候就確定的,比如執行完某乙個函式釋放臨時變數後棧頂指標回跳到哪個位置編譯時候就確定好了,不需要程式設計師管理。這樣帶來的弊端包括:不能申請編譯前不能確定大小的資料塊,比如陣列a[ 10 ],a後邊的[ ]中必須是常量!

而堆的資料指標移動是在程式執行時候確定的,比如在堆重申請資料塊a,int* a = new int[ i ],其中的變數i編譯時候不知道具體的值,i的大小決定了堆資料指標的移動動向。那麼堆資料指標的操作是怎麼實現的呢,其實是由作業系統提供的c執行時庫實現的,c執行時庫提供了malloc(),free()函式(在c++中這兩個函式的功能被封裝在運算子new和free裡)方便了我們堆資料的管理,堆資料指標的操作就由c執行時庫幫我們完成。

C C 堆和棧的區別

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

C C 堆和棧的區別

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

區分記憶體中的棧和堆與資料結構中的棧和堆

首先要明確一點,這兩個東西是八竿子打不著的東西,他倆沒啥關係 資料結構中的棧和堆 堆疊 首先在資料結構上要知道堆疊,儘管我們這麼稱呼它,但實際上堆疊是兩種資料結構 堆和棧。堆和棧都是一種資料項按序排列的資料結構。棧就像彈夾,先裝進去的最後出來,filo first in last out 堆像一棵倒...