mattconte / tlsf

Two-Level Segregated Fit memory allocator implementation.
1.17k stars 178 forks source link

Feature: query requested size from block (with recipe) #32

Open paniq opened 8 months ago

paniq commented 8 months ago

For a port of TLSF to our systems programming language, I had the requirement to be able to recover the requested size from a block, rather than the adjusted size. I implemented it in my port, and so far it turns out to work well, with no new spatial overhead added. I thought I'd let you know how it works, in case you (maintainer or user) are interested in replicating it:

  1. block.size now stores the requested size shifted by two bits - for 64-bit that's no problem, but for 32-bit we'd truncate two bits (though I see the implementation has a 30-bit limit there anyway).
  2. block_set_size() now accepts the requested size rather than the adjusted size.
  3. block_size() transparently aligns the returned size by ALIGN_SIZE; since in all previous adjustments, adjust == align_up(size, ALIGN_SIZE), this effectively has block_size() work as it did before.
  4. block_absorb() uses block_set_size(block_size(prev) + block_size(block) + block_header_overhead) rather than offsetting prev.size directly, which fixes the operation for the new format and also quantizes the block size of free blocks.
  5. block_split() receives both adjusted and requested size; adjust is used for all calculations; request is passed to block_set_size().
  6. likewise, block_trim_free(), block_trim_used(), block_prepare_used() forward the requested size along with the adjusted size.
  7. block_trim_free_leading() just passes the same remaining size to both adjusted and requested size.
  8. malloc() and memalign() pass the requested size to block_prepare_used() along with the adjusted size.
  9. tlsf_realloc() passes the requested size to block_trim_used() along with the adjusted size.
  10. a new API function tlsf_block_request_size() retrieves the requested size from block.size, without aligning it.
zeromus commented 8 months ago

This seems well researched and magically delicious. It would be a great boon to the library if this works. It's a great slide at the end of a presentation "Oh and by the way, you don't have to remember how big your allocations are... we do." and then it's a dropped mic and a standing ovation. Definitely worth further investigation.

btw... love your music!