Reimplementing software building blocks like malloc and free in D

Eugene Wissner belka at caraus.de
Sun Aug 12 06:35:17 UTC 2018


On Sunday, 12 August 2018 at 05:24:56 UTC, Mike Franklin wrote:
> I wasn't aware of Eugene's implementation.  At first glance it 
> looks real nice.  It appears to have some dependencies on other 
> features of his Tanya library, so at a minimum, those will have 
> to be removed or replaced.
>

It depends only on internal libc-free syscalls that can be 
replaced with mmap/munmap and on copy()/copyBackward() that are 
just memcpy and memmove respectively.

> But, how does it perform?  In order to make the case for using 
> these D implementations in druntime, we'll have to gather some 
> metrics on the implementations in terms of performance, memory 
> fragmentation, etc. and ensure they are on par with the C 
> standard library implementations or alternative implementations 
> like jemalloc and tcmalloc?

Some years ago I had a BigInt implementation that allocated and 
deallocated memory like crazy. I compared how it works with 
malloc and my own allocator and my allocator was slightly faster 
than glibc (probably because of thread-safety). But yes, a good 
implementation needs benchmarks which test it systematically 
under various conditions.

Tanya's allocator is also tested only on x86-64 Linux, but is 
trivially to port to Windows and other architectures. I actually 
had a Windows version before but removed it because I was too 
lazy to read msdn.

> Perhaps, with Eugene's permission, you can use his 
> implementation as a base, take some measurements, and see if it 
> can be improved upon with either more features or better 
> performance.

You can use it as reference when implementing something else or 
as a starting point for the further work. Anyway feel free to use 
it as you like.

P.S. In the last weeks I had thoughts to split low-level stuff 
from tanya and put it into a separate library, kind of native, 
gc-free x86-64 (and maybe aarch64) Linux runtime for D. Probably 
I should go for it :)


More information about the Digitalmars-d mailing list