Term of Dynamic Allocation

1. Memory Fragmentation

    在程式中不斷重覆allocate memory及free memory時,有可能allocate不到一塊
    足夠大小的連續(continuous)記憶體區塊(block of memory),稱之為Memory Fragmentation。
    簡單來說,如果記憶體當中,總共有三個不連續未使用的記憶體區塊,大小分別為10kBytes、
    5kBytes及7kBytes,而現在程式中要allocate一塊20kBytes的記憶體區塊,雖然可使用的記
    憶體大小共 10 + 5 + 7 = 22kBytes,但因為記憶體是分散的,並非一塊連續性的記憶體區塊
    所以allocation會失敗。

2. Memory Leak

    使用allocating function時,忘了free memory時,會導致"Memory Leak"。
    程式中可使用的memory愈來愈少,到最後可能會使用程式甚至系統"Crash"。
    這是一個十分常見的"Bug"。

3. Dangling pointers

    忘了free memory會導致"Memory Leak",但太早free memory會導致"Dangling pointer"
    當記憶體被釋放後,記憶體的使用權就交還給系統,這塊記憶體也許會被其它的程式使用
    但pointer仍持有該記憶體的位址,若利用pointer去存取時,此時已不是原本所意想的資料。
    ,此種狀況稱為"Dangling pointer"。

Hosted by www.Geocities.ws

1