While writing a structs function that I wanted to minimize allocations and use an internal preallocated buffer, but I noticed that arrays are losing their capacity when its length is changed.

For example:

void main() {

        int[] a;
        a.reserve = 1024;

        void dump(in ref int[] b,size_t line = __LINE__) {
                import std.stdio;
writeln(line, ": Buffer length = ", b.length, " capacity= ", b.capacity);
        }
        dump(a); // line 10
        a.length = 0;
        dump(a);
        a ~= [1,2,3];
        dump(a);
        a.length = 0;
        dump(a);
        a ~= [4,5,6];
        dump(a);
}

gives output:

10: Buffer length = 0 capacity= 2043
12: Buffer length = 0 capacity= 2043
14: Buffer length = 3 capacity= 2043
16: Buffer length = 0 capacity= 0
18: Buffer length = 3 capacity= 3

but I expected:

10: Buffer length = 0 capacity= 2043
12: Buffer length = 0 capacity= 2043
14: Buffer length = 3 capacity= 2043
16: Buffer length = 0 capacity= 2043
18: Buffer length = 3 capacity= 2043


Why is this happening, how to avoid it?


Reply via email to