public void *Allocate(int size) { if (FreeList.Count > 0) { var p = FreeList.First; FreeList.RemoveFirst(); return(p.Value.ToPointer()); } var buffer = Marshal.AllocHGlobal(size); return(buffer.ToPointer()); }