記憶體分配的三種方式

2021-08-23 12:17:49 字數 1194 閱讀 4439

把所有的點都說到,才能說明你有足夠的專案經驗,在實際工作的時候不會因為一些小問題而產生一些嚴重的bug,也證明了你有實力勝任這份工作。

要回答這個問題,我們必須先要理解c++的記憶體管理方式,需要站在記憶體四區的角度去審視一下**,這樣整個理解了記憶體分配的方式,回答的時候就只需要注意一些細節了。寫乙個例子然後畫一下記憶體示意圖。

int getmem(char **myp,int length)//使用二級指標的目的是改變指標的值,使用一級指標的目的是改變指標指向的值

char *tmp=(char *)malloc(sizeof(char)*length);

if(tmp==null)

memset(tmp,0,length);

/* memset(tmp,0,sizeof(tmp)//隨手就寫的,sizeof(tmp)是指標的大小,4個位元組

*/ memcpy(tmp,"hello...",length);

*myp=tmp; }

int main()

上面**的記憶體四區示意圖:

1、在棧上分配記憶體:函式中的臨時區域性變數分配在棧上,由作業系統自動分配,函式呼叫結束時記憶體也隨之析構,棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。

2、在靜態儲存區分配記憶體,這塊內存在程式編譯的時候就已經分配好,用來存放常量,全域性變數和static變數,內存在整個程式執行週期內都存在。

3、在堆區使用malloc或new申請記憶體,這種記憶體分配方式非常靈活,需要注意

①(立判)申請記憶體後立即判斷指標是否為null確定記憶體是否分配成功,如果為null則立即用return終止此函式,或者用exit(1)終止整個程式的執行,為new和malloc設定異常處理函式;

②(初始化)為申請的記憶體賦初值,分配的是一段連續的記憶體空間的話,要防止指標下標越界;

③(sizeof得到指標位元組數)sizeof是操作符,不能用sizeof得到記憶體空間的大小,只能在申請時候記住申請的空間大小;

④(防洩漏)在記憶體使用結束後必須用free或delete釋放記憶體,注意在記憶體使用中如果存在指標加1或減1 的操作應特別注意,釋放的記憶體要和申請的記憶體一致,放置記憶體洩漏,釋放記憶體後,應該立即將指標置為null,不要存在野指標。

**:

記憶體分配的三種方式

1.記憶體分配方式 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內...

三種記憶體分配方式

記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個 執行期間都存在。例如全域性變數,static變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執 行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令...

記憶體的三種分配方式

變數三大特點 變數的資料型別 變數的作用域 變數的儲存型別。記憶體和硬碟的差別 cpu執行程式從記憶體抓取 不從硬碟 從掉鏈角度出發,一旦掉鏈,記憶體資料丟失。而硬碟不會 程式在硬碟中,而執行成程序在記憶體 作業系統的作用 管理資源 首先記憶體虛擬位址為4g,第乙個g給核心,剩下的3個g給使用者空間...