public static void Free(UnmanagedMemoryPool *pool, void *ptr) { if (ptr != null) { void **pHead = (void **)ptr; * pHead = pool->Free; pool->Free = pHead; } }
public static void FreeAll(UnmanagedMemoryPool *pool) { void **pCur = (void **)pool->Alloc; byte * pNext = pool->Alloc + pool->BlockSize; for (int i = 0, count = pool->NumBlocks - 1; i < count; ++i) { *pCur = pNext; pCur = (void **)pNext; pNext += pool->BlockSize; } *pCur = default(void *); pool->Free = pool->Alloc; }
public static void FreePool(UnmanagedMemoryPool *pool) { Free((IntPtr)pool->Alloc); pool->Alloc = null; pool->Free = null; }