VectorInitBench — Compiler Comparison

02/25/2026 12:21:02 PW02RAS4 16× CPU @ 2304 MHz N = 500 000 · 20 repetitions

Distribution of wall-clock times per benchmark

Box = mean ± 0.675σ  (normal 25th/75th percentile) ·  Whiskers = mean ± 2.5σ  ·  Centre line = median  ·  × = mean

Mean time summary — fastest highlighted

BenchmarkMSVC 19GCC 15.2Clang 21.1
BM_CBaseline
MyStruct* vec = (MyStruct*)new std::byte[ sizeof(MyStruct) * N ];
for (size_t i = 0; i < N; ++i) {
    ::new (static_cast<void*>(vec+i)) MyStruct(i, i);
}

delete[] vec;
benchmark::DoNotOptimize(vec);
850.2 ±41.5 822.2 ±40.4 929.5 ±88.3
BM_CBaseline2
MyStruct* vec = (MyStruct*)new std::byte[ sizeof(MyStruct) * N ];
for (size_t i = 0; i < N; ++i) {
    vec[i] = MyStruct(i,i);
}
delete[] vec;
benchmark::DoNotOptimize(vec);
2897.1 ±69.8 845.2 ±43.9 915.4 ±97.7
BM_CBaseline3
MyStruct* vec = (MyStruct*)new std::byte[ sizeof(MyStruct) * N ];
for (size_t i = 0; i < N; ++i)
    std::construct_at(vec + i, static_cast<int>(i), static_cast<int>(i));
delete[] vec;
benchmark::DoNotOptimize(vec);
842.2 ±47.0 831.1 ±45.5 905.6 ±69.9
BM_EmplaceBack
std::vector<MyStruct> vec;
vec.reserve(N);
for (size_t i = 0; i < N; ++i) {
    vec.emplace_back(i, i);
}
benchmark::DoNotOptimize(vec);
1006.4 ±63.5 969.5 ±33.5 1123.8 ±83.4
BM_FromRange
std::vector<MyStruct> vec( std::from_range, 
    std::views::iota(0uz,N) |
    std::views::transform(
        [](size_t i){ 
            return MyStruct(i,i); 
        }) );

benchmark::DoNotOptimize(vec);
2913.9 ±60.2 839.4 ±28.2 915.9 ±65.6
BM_FromRangeIterators
auto range = std::views::iota(0uz,N) |
        std::views::transform(
            [](size_t i){ 
                return MyStruct(i,i); 
            });
            
std::vector<MyStruct> vec( std::begin(range), std::end(range) );

benchmark::DoNotOptimize(vec);
2909.9 ±71.3 836.1 ±35.2 934.6 ±94.7
BM_PushBack
std::vector<MyStruct> vec;
vec.reserve(N);
for (size_t i = 0; i < N; ++i) {
    MyStruct obj(i, i);
    vec.push_back(obj);
}
benchmark::DoNotOptimize(vec);
3021.9 ±87.8 970.6 ±61.1 1186.0 ±99.3
Green — within this compiler’s own σ of its personal best Fastest · 2nd · Slowest — rank per benchmark (ties share when gap ≤ own σ) Bold = gold rank · ±σ = std dev across the 20 repetitions