c記憶體管理學習總結

2021-08-07 18:21:24 字數 962 閱讀 1702

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...