On Thu, 05 Jan 2017 11:09:01 +0000, xtreak wrote:
> Can someone explain me the actual benefits of using this

The target audience is people writing libraries that need to allocate 
memory, where the libraries' target audiences care about performance more 
than most.

GC allocation and scans can be expensive. Far more so when you have to 
deal with interior pointers, which are common in D (thanks to how arrays 
are designed). Real-time programming especially isn't allowed to touch 
the GC in general because it could cause the program to pause for an 
unpredictable amount of time.

There are a lot of other approaches to memory management. You might, for 
instance, have an allocator that just holds a large buffer of memory and 
a pointer to the first free segment of it. You can't free up arbitrary 
segments of memory from it and expect them to be reused. This is 
convenient when you are dealing with a task that allocates its own memory 
and then finishes without sharing that memory anywhere else.

Or you could use malloc, which is better for minimizing memory use and 
amortizes the cost of memory management better than a GC.

If you write your code to use std.experimental.allocator, then other 
people who depend on it can decide what strategy works for them.

The downside is that you must write your code in the least capable way 
available. You can't rely on resources being automatically cleaned up at 
any point because the person might be using an allocator that just calls 
malloc and free.

As for benchmarks, an allocator is just a thin wrapper around malloc/
free, or a thin wrapper around the GC, or the like. The differences 
should be relatively obvious.

There are some other interesting things you can do with this, though, 
regarding tracking how you use memory. Or you could use it to better 
benchmark malloc vs GC for your application.

Reply via email to