Does changing the capacity of dynamic arrays actually do anything with respect to memory allocation? I have the following data with DMD 2.071.1

// With dmd -profile=gc

void main() {
    import std.stdio;

    int[] arr = [1, 1, 1];
    arr.reserve(512);

    foreach (i ; 0..10)
        arr ~= 42;
}

/*
 * bytes allocated, allocations, type, function, file:line
 *              40              10 int[] D main test.d:8
 *              12               1 int[] D main test.d:4
 */

void main() {
    import std.stdio;

    int[] arr = [1, 1, 1];
    arr.reserve(512);

    foreach (i ; 0..20) // Just changing the number of elements
        arr ~= 42;
}

/*
 * bytes allocated, allocations, type, function, file:line
 *              80              20 int[] D main test.d:8
 *              12               1 int[] D main test.d:4
 */

void main() {
    import std.stdio;

    int[] arr = [1, 1, 1];
    // Same as above, without reserve

    foreach (i ; 0..20)
        arr ~= 42;
}

/*
 * bytes allocated, allocations, type, function, file:line
 *              80              20 int[] D main test.d:8
 *              12               1 int[] D main test.d:4
 */

As one can see there seem to be absolutely no difference in allocations wether we reserve or not. I've ran more experiences, reserving way less or more than I appened to no avail: allocations seem to just ignore it.

Isn't the point of .reserve to perform preallocation?

Reply via email to