On Friday, 11 August 2017 at 22:36:27 UTC, bitwise wrote:
On Friday, 11 August 2017 at 19:01:44 UTC, Yuxuan Shui wrote:
On Friday, 11 August 2017 at 18:44:56 UTC, bitwise wrote:
[...]

My guess is a pointer to the array still lives somewhere on the stack. This gives the expected output:

void f()
{
    S[] x = [S(1), S(1)];
    writeln("GC allocated: ", (GC.addrOf(x.ptr) !is null));
    x = null;
}

int main(string[] argv)
{
    f();
    GC.collect();
    writeln("live objects: ", S.count);
    return 0;
}

Makes sense. I was uncommenting unit tests one-by-one after making some changes when I triggered this. I guess they were passing before because subsequent unit tests cleared the pointers off the stack. I guess I can just call a function that allocates a large zeroed-out array on the stack in the last unit test before checking the count if this happens again.

  Thanks

Collect - is a hit to the GC, not an order. It can ignore this request. Also do not rely on the gc calling a dtor - it is not safe and can be called totally randomed, so use RC instead or expicit destroy()

Reply via email to