-
Notifications
You must be signed in to change notification settings - Fork 228
Open
Description
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:
block.sizenow 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).block_set_size()now accepts the requested size rather than the adjusted size.block_size()transparently aligns the returned size byALIGN_SIZE; since in all previous adjustments,adjust == align_up(size, ALIGN_SIZE), this effectively hasblock_size()work as it did before.block_absorb()usesblock_set_size(block_size(prev) + block_size(block) + block_header_overhead)rather than offsettingprev.sizedirectly, which fixes the operation for the new format and also quantizes the block size of free blocks.block_split()receives both adjusted and requested size;adjustis used for all calculations;requestis passed toblock_set_size().- likewise,
block_trim_free(),block_trim_used(),block_prepare_used()forward the requested size along with the adjusted size. block_trim_free_leading()just passes the same remaining size to both adjusted and requested size.malloc()andmemalign()pass the requested size toblock_prepare_used()along with the adjusted size.tlsf_realloc()passes the requested size toblock_trim_used()along with the adjusted size.- a new API function
tlsf_block_request_size()retrieves the requested size fromblock.size, without aligning it.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels