Integer Division: Compile-Time Constant vs. Runtime Variable

Question 9 / 51 Correct so far: 0 (0 answered)

Snippet A

Const Divide

long long divideByConstant(const std::vector<int>& data) {
    long long sum = 0;
    for (int x : data)
        sum += x / kDivisor;
    return sum;
}

long long result = divideByConstant(DATA);
Snippet B

Var Divide

long long divideByVariable(const std::vector<int>& data, int divisor) {
    long long sum = 0;
    for (int x : data)
        sum += x / divisor;
    return sum;
}

long long result = divideByVariable(DATA, divisor);
Shared test data (shared-setup)
constexpr int kDataSize = 65536;
constexpr int kDivisor  = 7;

static std::vector<int> makeData() {
    std::vector<int> v(kDataSize);
    for (int i = 0; i < kDataSize; ++i)
        v[i] = i + 1;
    return v;
}

static const std::vector<int> DATA = makeData();

Which snippet is faster?

Select the correct answer(s)