On Saturday, 22 June 2019 at 16:52:07 UTC, Anonymouse wrote:
When entering the following function, does it allocate:

1. 0 times, because while there are closures defined, none is ever called?
2. 2 times, because there are closures over two variables?
3. 20 times, because there are 20 unique closures?

4. One time, allocating a single closure for all variables referenced in nested functions. Easy to check by inspecting the generated asm (https://run.dlang.io/is/qO3JxO):

void receive(void delegate() a, void delegate() b) {}

void foo()
{
    int i;
    long l;

    void foo1() { i += 1; }
    void foo2() { l += 1; }

    receive(&foo1, &foo2);
}

When adding `scope` to the `receive()` params, the closure is allocated on the stack.

Reply via email to