1.c中分配記憶體有malloc()和calloc()函式,它們返回乙個位址指標,
malloc()函式使用如下:
double *ptd;
ptd = (double *) malloc (30 * sizeof(double));
這段**請求30個double型別值的空間,並把ptd指向該空間所在位置。
calloc()函式使用如下:
long * newmem;
newmem = (long *) calloc (100,sizeof(long));
在程式的結尾需要使用free()函式來釋放記憶體:
free(ptd);
calloc()函式還有乙個特性,它將塊中的全部位都置為0;
如果在程式結尾不使用free()那麼在最後,自動變數消失,分配記憶體仍然存在,位址不見了,便不能再使用;雖然在這個程式結束後,系統會自動釋放記憶體,但這個弊端是存在程式執行之中,所以應該培養程式結尾用free()的好習慣;
2.型別限定詞const和volatile
const float * pf; //pf指向的值不能被改變,pf本身是可以被改變的
float * const pt; //pt指向的值可以被改變,pt本身位址不能別改變
限定詞volatile告訴編譯器該變數除了可以被程式改變以外還可以被其他**改變。
volatile int locl; //locl是乙個易變的位置
例如:
val1 = x;
val2 = x;
乙個聰明的優化器會注意到x的值沒有發生改變,它把x臨時儲存在乙個暫存器中,接著從暫存器而非初始記憶體位置讀取該值以節省時間。這個過程被稱為快取。volatile宣告意味著每次都需要從記憶體中讀取。 記憶體管理學習筆記
1.棧 堆和靜態區 靜態區 儲存自動全域性變數和static變數 包括全域性靜態變數和區域性靜態變數 靜態區的內容在整個程式的生命週期內都存在。棧 儲存區域性變數。棧上的內容只在函式的範圍內存在,當函式執行結束,這些內容也會自動被銷毀。其特點是效率高,但是空間大小有限。堆 由malloc系列函式或n...
cocos記憶體管理學習
口訣 1.誰建立,誰釋放。通過new或者clone建立的物件,必須呼叫release或者autorelease。2.new,clone以外的方法建立的物件都被宣告了autorelease。3.誰retain,誰release。無論這個物件是如何生成的,只要呼叫了retain就要呼叫release。正...
object c 記憶體管理學習筆記
nsautoreleasepool pool nsautoreleasepool alloc init pool drain 這個函式可以把autoreleasepool裡的物件釋放 在for迴圈中每次都釋放記憶體池的示例 nsautoreleasepool temppool for i 0 i a...