Tiniux 3.0 Memory.c 詳解 -- OSMemFree
阿新 • • 發佈:2018-11-15
---------------------------------------------
-- 時間:2018-11-14
-- 建立人:Ruo_Xiao
-- 郵箱:[email protected]
---------------------------------------------
void OSMemFree(void *pMem) { tOSMem_t *ptOSMemTemp = OS_NULL; //待釋放的地址為空則返回 if (pMem == OS_NULL) { return; } //待釋放的地址不在堆中則返回 if ((uOS8_t *)pMem < (uOS8_t *)gpOSMemBegin || (uOS8_t *)pMem >= (uOS8_t *)gpOSMemEnd) { return; } // protect the heap from concurrent access OSIntLock(); //得到該記憶體塊對應的資訊塊(tOSMem_t) ptOSMemTemp = (tOSMem_t *)(void *)((uOS8_t *)pMem - SIZEOF_OSMEM_ALIGNED); //該資訊塊為1,即:正在使用,才能釋放該記憶體 if( ptOSMemTemp->Used==1 ) { //釋放! ptOSMemTemp->Used = 0; //若該已經釋放的記憶體塊低於gpOSMemLFree,則更新Free指標 if (ptOSMemTemp < gpOSMemLFree) { gpOSMemLFree = ptOSMemTemp; } //釋放完記憶體,為了避免記憶體碎片,要進行記憶體塊整理。 OSMemCombine(ptOSMemTemp); } OSIntUnlock(); return; }
(SAW:Game Over!)