jeudi 14 novembre 2019

Performance penalty of using boost::irange over raw loop

A few answers and discussions and even the source code of boost::irange mention that there should be a performance penalty to using these ranges over raw for loops.

However, for example for the following code

#include <boost/range/irange.hpp>

int sum(int* v, int n) {
    int result{};
    for (auto i : boost::irange(0, n)) {
        result += v[i];
    }
    return result;
}

int sum2(int* v, int n) {
    int result{};
    for (int i = 0; i < n; ++i) {
        result += v[i];
    }
    return result;
}

I see no differences in the generated (-O3 optimized) code (Compiler Explorer). Does anyone see an example where using such an integer range could lead to worse code generation?

Aucun commentaire:

Enregistrer un commentaire