Replace stl::list (tinystl::vector with O(n) push_front) with a sorted
stl::vector free list that maintains address-order invariant.
Key improvements:
- free(): uses bx::upperBound for O(log n) sorted insertion + immediate
adjacent-block coalescing instead of O(n) push_front with deferred merge
- compact(): O(1) check (m_used empty?) instead of O(n log n) sort +
O(n) linear merge pass on every call
- alloc(): first-fit scan over cache-friendly contiguous memory instead
of pointer-chasing through fragmented list
- add(): sorted insert with coalescing via bx::upperBound, same as free()
Uses bx::upperBound from the bx foundation library for binary search,
no std:: usage. Added operator> to Free struct for bx::compareAscending
compatibility.
The public API and behavioral semantics are unchanged. All existing
callers (dynamic index/vertex buffer allocators, uniform cache store
allocator) continue to work identically.