內存管理與局部指針

程序生命週期較短或者比較簡單,可以不用考慮這些。不用看下去了。

 

局部指針在使用完畢之後要釋放掉。(參數指針和返回指針 不在此論,因爲外部還會有指向內存地址的指針。在函數內釋放反而會出錯)如果不釋放掉指針所指向的內存地址會一直保持着被佔用的狀態。如果多了(一次性運行超長時間或者超多調用局部指針)會導致內存不足的報錯--內存泄漏。所以使用局部指針的時候建議malloc() free() //   int *p    申請 p = (char *)malloc( 30 * sizeof(char) ); 指針使用~   釋放free(description); 

局部指針指向內存地址的不確定性導致(間隔其他變量的申請地址),非一次性申請的內存空間不連續,被分割成各種小塊。

使得應用程序不能申請到連續的大塊內存而出錯。所以需要內存管理。

申請一大塊連續的內存空間。然後每次使用局部指針的時候都從這塊空間裏面申請,然後釋放。不會影響到整體內存空間的連續性。

 內存管理可以自己做。做一個狀態表,用賦值的方式一次性申請一大塊連續內存。通過狀態表來判斷是否使用 而不是NULL

 

也可以用操作系統帶的內存管理 例如ucos

INT8U Partiontion[100][32]   一個狀態表 100塊,每一塊32字節

INT8U *P

 Partiontion = OSMemCreate(Partition, 100, 32, &err);  創建

P = OSMemGet(PartitionPtr, &err);  申請

 指針使用~

OSMemPut(PartitionPtr, P); 釋放 

 

 

另外聲明定義指針的時候。系統只分配了存儲指針本身的內存,並未分配存儲數據的內存

定義之後給他賦值一個已經存在的地址。而不能直接賦值。

int *p;

int a=5;

p=5;//錯誤的 不能直接賦值。    

p=&a;//正確,賦予了一個指向的地址。

或者 p=“字符串”;      因爲在這裏 雙引號 做了3件事:  
 1.申請了空間(在常量區,永存!),存放了字符串 
 2. 在字符串尾加上了'/0'    
 3.返回地址    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章