Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
paniq opened this issue Feb 20, 2024 · 1 comment
Open

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

paniq opened this issue Feb 20, 2024 · 1 comment

Comments

@paniq
Copy link

paniq commented Feb 20, 2024

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.
@paniq paniq changed the title Feature: query requested size from block Feature: query requested size from block (with recipe) Feb 20, 2024
@zeromus
Copy link

zeromus commented Feb 21, 2024

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants