記憶體分配管理

2021-09-24 20:28:43 字數 1065 閱讀 3650

系統中的記憶體分為棧、堆、全域性區、**區

棧:由編譯器自動分配釋放,參訪函式的引數值,區域性變數,函式棧幀,函式呼叫過程。

堆:由程式設計師自行分配想要的空間大小,c中的malloc等函式,c++中的new

全域性區(資料區):存放的是全域性變數和靜態變數,初始化的存在一起,未初始化的放一起,程式結束後由系統釋放

**區:存放函式體的二進位制**。

int tmp1 = 0; //初始化的全域性變數(全域性區)

static int tmp2 = 1;//初始化的靜態變數(全域性區)

short *p1; //全域性未初始化區

static short *p2;//

int main()

由程式設計師自行分配管理的動態記憶體區:堆

c中用到以上函式進行動態記憶體開闢,有可能失敗,所以要進行判空。     釋放開闢空間:free,c中的動態記憶體釋放用的是free,free之後將其指標置空。

在c++中,申請動態記憶體開闢用的是new函式,而對new/delete來說分為操作內建型別和自定義型別。

new的原理:new-----operator new( )-----建構函式,其中operator new底層實現用的是malloc

delete原理:析構函式(完成對資源的清理工作)----operator delete( )

new [n]:呼叫operator new[ ]( )----n次operator new( )-----n次構造

delete[ ]:n次析構,operator delete[ ]( )中n次operator delete( )

new申請空間的返回值就是new後面的型別,而malloc等的返回值是void*,需要強轉

new申請連續空間給出個數即可,而malloc需用到sizeof()計算

new/delete是操作符,而malloc/free是函式

new申請的空間可以初始化

new可以申請自定義型別和內建型別,而malloc只能申請內建型別。

new申請空間失敗時會丟擲異常,需要捕獲異常,而malloc申請失敗返回null,需要判空

記憶體分配 Go記憶體管理 記憶體分配一

go作為乙個比較新晚 新 的語言,自然借鑑前輩們的優點,比如說語言本身負責記憶體管理 對協程和高併發的高優支援 簡單高效的語法等。本篇及後續的幾篇要講的就是還沒提到的比較複雜的記憶體管理。學習記憶體管理 分配 前,如果有jvm的記憶體管理的基礎,會變得非常簡單,如果是第一次接觸記憶體管理,在看完go...

C 記憶體管理 記憶體分配

1 c 編譯的程式占用的記憶體分類 1 棧區 stack 程式執行時由編譯器自動分配,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。程式結束時由編譯器自動釋放。2 堆區 heap 在記憶體開闢另一塊儲存區域。一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注...

記憶體分配和管理

1.分配記憶體的底層函式1.1 頁 include linux mm type.h struct page lru nr lru lists structzone reclaim statreclaim stat unsigned long pages scanned since last recl...