On my machine (OS X), this program eats up memory with no end in sight

import std.concurrency;
import core.stdc.stdio;

void start()
{
    while(true)
    {
        receive(
            (int msg)
            {
                char[2] s = '\0';
                s[0] = cast(char)msg;
                puts(s.ptr);    // remove this => no memory leak
            }
        );
    }
}


void main()
{
    auto hw_tid = spawn(&start);

    while(true)
    {
        send(hw_tid, 64);
        auto b = new ubyte[](1_000); // 10_000 => no memory leak
    }
}

This is very odd, no? I'm not sure if it's a bug, but it sure is surprising. Why should "puts" cause a GC leak (writeln is the same)? What's so special about small allocations that allows all my memory to get filled up?

Reply via email to