On Thursday, 5 April 2018 at 21:11:53 UTC, Steven Schveighoffer wrote:

But the old block doesn't go away! It's collected and stored in a free list for future allocations.

-Steve

Big thanks, -Steve! Really program like the next:

==============8<==============
void main()
{
    float[3] f;
    float[3][] x;
    float[3][] y;
    writefln("float = %s bytes", float.sizeof);
    writefln("float[3] = %s bytes", f.sizeof);

    int total = 200;
    foreach(i; 0..total)
    {
        foreach (j; 0..1000)
        {
            x ~= [0.01, 0.02, 0.03];
        }
    }

    int before = MemoryUsage();
    foreach(i; 0..total/2)
    {
        foreach (j; 0..1000)
        {
            y ~= [0.01, 0.02, 0.03];
        }
    }
    int after = MemoryUsage();
writefln("%dK * float[3] = %d Kbytes", total/2, (after-before));
}
==============>8==============

Prints:
float = 4 bytes
float[3] = 12 bytes
100K * float[3] = 1320 Kbytes

Very well. I'm thinking how to optimize my game program to not be "pathological" on loading the models.

Reply via email to