I think you mean that it doesn’t go back to previous nodes when the current one is empty, resulting in frees being no op if they are in the previous block, even if they are the latest non freed allocation.
That is not the same as freeing the node, it can keep the node while still going to the previous. It has no idea how expensive it will be to acquire a new block of memory when it needs one, so it’s a good idea to keep unused memory for reuse.
Please don’t make a statement without an explanation, I can only guess at what you mean.
My guess is: if the array list grows and cant resize the existing allocation, resulting in a reallocation, you lose the ability to free prior allocations as you lose the pointer to the array lists previous allocation, even after you free the array list.
I interpret “complete free” as relinquishing the memory to the backing allocator/OS which has an unknown but likely large latency, many allocators prefer to keep and reuse the memory instead.
You mean LIFO free order for all allocations, not restricted to subset based on an internal node of memory. I would describe that as “true/full LIFO free order” compared to “restricted/subset LIFO free order”.
That was very pedantic, but clarity is important.
Just based off the name FiloBuffer doesn’t sound like an allocator, it’s at least not using the allocator interface? It should be an allocator, as I said, a custom allocator is very ziggy.
It also sounds like it holds a single contiguous chunk of memory? Is it a fixed size or does it grow?
If it grows then it can’t have a single chunk of memory without invalidating pointers.
I want details, you gave me less than what I could infer from the name.
Don’t take that as harsh, I get that the important difference is it does full LIFO compared to ArenaAllocators restricted LIFO.