另外,我們可以看一下:
堆(heap):堆是用於存放程序執行中被動態分配的記憶體段,它的大小並不固定,可動態擴張或縮減。當程序呼叫malloc等函式分配記憶體時,新分配的記憶體就被動態新增到堆上(堆被擴張);當利用free等函式釋放記憶體時,被釋放的記憶體從堆中被剔除(堆被縮減)
棧(stack):棧又稱堆疊, 是使用者存放程式臨時建立的區域性變數,也就是說我們函式括弧「{}」中定義的變數(但不包括static宣告的變數,static意味著在資料段中存放變數)。除此以外,在函式被呼叫時,其引數也會被壓入發起呼叫的程序棧中,並且待到呼叫結束後,函式的返回值也會被存放回棧中。由於棧的先進後出特點,所以棧特別方便用來儲存/恢復呼叫現場。從這個意義上講,我們可以把堆疊看成乙個寄存、交換臨時資料的記憶體區。
它是由作業系統分配的,記憶體的申請與**都由os管理
詳見:
c 程序記憶體空間分布
c 程序記憶體空間分布 注意各部分的記憶體位址誰高誰低,注意棧從高到低分配,堆從低到高分配 記憶體分布分為5個部分,從高位址到低位址一次為 棧區 stack 堆區 heap 未初始化資料段 uninitialized data 初始化資料段 initialize data 段 text 1.文字段也...
C CPP程序記憶體空間分布
記憶體分布分為5個部分,從高位址到低位址依次為棧區 stack 堆區 heap 未初始化資料段 uninitialized data 初始化資料段 initialize data 和 段 text 有些文件也把初始化的資料段和未初始化的資料段合稱全域性區。1.文字段 唯讀 共享,作業系統管理 文字段...
程序的記憶體空間布局
程序的記憶體布局在結構上是有規律的,對於 linux 系統上的程序,其記憶體空間一般可以粗略地分為以下幾大段,從高記憶體到低記憶體排列 1 核心態記憶體空間,其大小一般比較固定 可以編譯時調整 但 32 位系統和 64 位系統的值不一樣。2 使用者態的棧,大小不固定,可以用ulimit s 進行調整...