On Tuesday, 7 January 2014 at 00:54:10 UTC, bearophile wrote:
Meta:

Why not just return arr.dup instead? You're returning a slice of a stack-allocated array, so of course you shouldn't write code like this.

In certain critical code paths heap allocations are evil (perhaps even if your generational GC has a stack-like nursery, that currently the D GC doesn't have) :-) And you also want to minimize copies and initializations.

Bye,
bearophile

Wouldn't it be better to simply allocate on the stack directly in the calling function? Or if that is not a possibility use a region allocator or even a ScopeStack allocator? It's basically just a pointer bump so it should be fast.

So it would translate to something like this:

int[] foo(Allocator)(ref Allocator allocator)
{
   auto arr = allocator.allocate!(int[])(5);
   foreach(i, ref elem; arr)
      elem = i;
   return arr;
}

Reply via email to