Why does array loses it internal capacity on length change?
Uldis via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Mar 12 01:56:48 PST 2016
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?
More information about the Digitalmars-d-learn
mailing list