系統中的記憶體分為棧、堆、全域性區、**區
棧:由編譯器自動分配釋放,參訪函式的引數值,區域性變數,函式棧幀,函式呼叫過程。
堆:由程式設計師自行分配想要的空間大小,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...