Does foreach on array literal allocate?

Bill Baxter wbaxter at gmail.com
Thu Dec 4 18:35:50 PST 2008


On Fri, Dec 5, 2008 at 10:37 AM, Walter Bright
<newshound1 at digitalmars.com> wrote:
> Bill Baxter wrote:
>>
>> Does anyone know off the top of their head if code like this allocates
>> or not with current DMD 1.x compilers?
>>
>> foreach(x; [1, 2, 3, 4])
>> {
>>     // do something non-allocating with x
>> }
>
> Here's how to find out. Compile:
>

Thanks for the explanation.  Though Obj2Asm is I think part of the EUP, right?
Maybe I'll get that after all.

> and note the call to gc_malloc().

Bummer.

Does a static-sized array initializer also allocate?

int[4] v = [1,2,3,4];
foreach(x; v) {
    /// ...
}

Or maybe this (also) works without allocation?

foreach(x; Tuple!(1,2,3,4))
{
   ///
}

This kinda code is useful for the case where you have to do the same
thing to two or three local variables.  You can write a local function
to do it, but foreach on a static set of them breaks up the visual
flow of the code a little less, I think.


--bb



More information about the Digitalmars-d mailing list