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"。