On Friday, 15 January 2021 at 15:18:31 UTC, IGotD- wrote:
Bump the pointer is a very fast way to allocate memory but what is more interesting is what happens when you return the memory. What does the allocator do with chunks of free memory? Does it put it in a free list, does it merge chunks? I have a feeling that bump the pointer is not the complete algorithm that D uses because of that was the only one, D would waste a lot of memory.

I don't know what DMD does exactly, but I guess this is called an "arena" or something like that? Objective-C does something similar with its autorelease pool.

Basically, you have a point in the call-tree where you know that all work has been done and then you just reclaim everything that is not marked as in-long-term-use. So you don't do the mark phase, you put the burden of marking the object as in use on the object/reference and just sweep. (Or assume that everything can be freed, which fits well with a compiler that is working in discrete stages).

Side note: I incidentally wrote a little allocator cache yesterday that at compile time takes a list of types and then takes the size of those types, sorts it and builds an array of freelists for those specific sizes and caches objects that are freed if they match the desired size (then there is a threshold for the length of the freelist, when that is hit C free() is called. It should be crazy fast too, since I require the free call to provide the type so the correct free list is found at compile time, not at run time.

Reply via email to