C 記憶體管理

2021-07-10 07:15:45 字數 1439 閱讀 3875

首先有幾點綜述:

1. 記憶體的本質是資源

2. 作業系統在掌管記憶體

3. 程式設計師能做的就是對記憶體進行申請和歸還

申請和釋放記憶體分別用到運算子:new(申請)和delete(釋放)。

申請的方法:

//申請乙個記憶體

int *p=new int;//申請記憶體

delete p;//釋放記憶體

申請塊記憶體的方法:

//申請和釋放塊記憶體

int *arr=new int[10];//申請10個整型的記憶體空間

delete arr;//釋放記憶體塊

c語言中的記憶體申請和釋放,用的是malloc函式。

void *malloc(size_t size);

void free(void *memblock);

如果在程式設計中,用new申請了記憶體,那就要用delete釋放,用malloc申請就要用free來釋放。

在申請時,實際上不一定是能夠申請成功的,因為可能記憶體當時已經分配完了,我們要預見這種情況。

//申請失敗時有反饋

int *p=new int[1000];

if(null==p)

值得一說的是用null==p這種語言風格更好,因為一不小心打成null=p時,系統會報錯,能預防一些錯誤。

那麼,在釋放記憶體時需要注意什麼,

int *p=new int;

if(null==p)

delete p;

p=null;

int *p=new int p[1000];

if(null==p)

delete [p];

p=null;

即使申請失敗記憶體,也要講指標想申請的記憶體釋放掉,並將其置空,避免重複**等異常情況。

課後練習中,完成的作業能通過系統驗證,但在vs2013中,卻無法通過編譯,**如下:

#include#include#includeusing namespace std;

int main()

{ //在堆中申請100個char型別的記憶體

char *str = new char[100];

//拷貝hello c++字串到分配的堆中的記憶體中

strcpy(str, "hello imooc");

//列印字串

cout <

這是因為strcpy的安全性較低,微軟在編譯器中棄用了這個函式,用strcpy_s代替。如果堅持用的話,可以在int main()上一行新增西面**:

#pragma warning(disable:4996);

即可編譯通過。

C 記憶體管理 C 記憶體分類

c 記憶體管理 記憶體分類 moakap 在編寫程式過程中,程式設計師必須清楚程式記憶體的分配機制,合理進行記憶體管理,這樣才能得到高效的程式。同時,如果對c 記憶體分配基本概念不理解,使用不當,一方面浪費了寶貴的記憶體資源,降低了程式執行效率,另一方面還會造成程式中意想不到的錯誤。在 c 程式中,...

C 記憶體管理

在嵌入式系統中使用c 的乙個常見問題是記憶體分配,即對new 和 delete 操作符的失控。具有諷刺意味的是,問題的根源卻是c 對記憶體的管理非常的容易而且安全。具體地說,當乙個物件被消除時,它的析構函式能夠安全的釋放所分配的記憶體。這當然是個好事情,但是這種使用的簡單性使得程式設計師們過度使用n...

c 記憶體管理

這裡對我暫時所了解的記憶體機制做個記錄,以後再補。首先是記憶體分配 記憶體主要分為3個部分 一是從靜態儲存區域分配。編譯時分配好,主要存放全域性變數,static變數,程式結束釋放。二是從堆疊區域分配。函式內區域性變數存放的地方。隨變數生命週期自動釋放。效率較高,但大小有限。三是從記憶體池分配,即從...