What's the D way of allocating memory?

monarch_dodra monarchdodra at gmail.com
Wed Aug 7 10:47:37 PDT 2013


On Wednesday, 7 August 2013 at 15:21:56 UTC, Gary Willoughby 
wrote:
> What's the D way of allocating memory? Do you guys just use 
> malloc() and free()? Or are there functions in phobos that 
> should be used? I just need a buffer of variable length 
> allocating every now and then.

I usually use "new": It takes care of T.sieof, it initializes my 
memory to T.init, and conveniently returns a slice. Furthermore, 
the slice has "append" info, which is always a nice plus. This is 
really the equivalent of C++'s new.

If you want to do "semi-manual" memory management, you can use 
GC.malloc, which works like normal malloc, but is *still* managed 
by the GC. I'd actually recommend "GC.qalloc" over "GC.malloc": 
it's the same function, but qalloc actually returns more info, 
such as the total amount of memory *actually* allocated. This is 
very useful when you need a buffer of arbitrary size, as you get 
the most out of your allocation. The memory can also be eagerly 
marked as unused with "GC.free", although you'll still have to 
wait for a collect for it to actually be freed.

Finally, you have C's malloc and free. I don't have much to say 
about these that you shouldn't already know.

If you need a non-initialized buffer, but don't want to bother 
with a hand written [GC.]malloc, you can use phobos' 
std.array.uninitializedArray and 
std.array.minimallyInitializedArray. These conveniently return a 
slice of type T, containing N elements, but without actually 
initializing them. It's convenient.


More information about the Digitalmars-d-learn mailing list