C C 堆疊的區別

2021-10-02 22:26:48 字數 999 閱讀 9930

1.乙個由c/c++編譯的程式占用的記憶體:

①棧區stack

函式引數,區域性變數等

②堆區heap

malloc new 自動申請的記憶體

③全域性區(靜態區)static

bss區 沒有初始化或初始化位0的全域性/靜態變數

data區 初始化的全域性/靜態變數(非const)

④文字常量區rodata

字串、const修飾的變數

⑤程式**區text

函式體的二進位制**

2.堆和棧的區別

①申請方式:

ⅰ棧空間:

編譯器自動分配和釋放

ⅱ堆空間:

程式設計師分配和釋放,若未釋放,程式結束時os**。

②申請後系統的響應:

ⅰ棧:

只要棧剩餘空間大於所申請的空間,系統就為程式提供記憶體,否則報異常棧溢位

ⅱ堆:系統有乙個記錄空閒記憶體位址的鍊錶,系統收到程式的申請,將遍歷該鍊錶,尋找第乙個空間大於所申請的空間的堆結點,從空閒結點鍊錶中刪除該結點。

對於大多數系統,會在這塊空間的首位址上記錄申請的空間的大小,便於釋放。

③申請空間大小限制:

④申請效率:

ⅰ棧:

程式自動分配,速度較快。

ⅱ堆:程式設計師分配,速度較慢,容易產生記憶體碎片,但方便。

windows下最好的方式使用virtualalloc

⑤儲存的內容

ⅱ棧:堆的頭部用乙個位元組記錄申請空間的大小。

⑥訪問效率:

ⅰ棧:較快

ⅱ堆:較慢

c c 中堆疊的區別

這個文章不錯,所以轉一下!共冕!一直就搞不清出這個問題,今天上網想起來,隨即搜了搜,找到了一些資料。不知源作者是誰。姑且 拿來主義 一下,呵呵。一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變...

堆,棧,堆疊的區別

乙個程式一般分為3段 text段,data段,bss段 text段 就是放程式 的,編譯時確定,唯讀,data段 存放在編譯階段 而非執行時 就能確定的資料,可讀可寫 就是通常所說的靜態儲存區,賦了初值的全域性變數和靜態變數存放在這個區域,常量也存放在這個區域 bss段 定義而沒有賦初值的全域性變數...

佇列 堆 棧 堆疊的區別?

佇列是先進先出 就像一條路,有乙個入口和乙個出口,先進去的就可以先出去。而棧就像乙個箱子,後放的在上邊,所以後進先出。程序中每個執行緒都有自己的堆疊,這是一段執行緒建立時保留下的位址區域。我們的 棧記憶體 即在此。至於 堆 記憶體,我個人認為在未用new定義時,堆應該就是未 保留 未 提交 的自由空...