Skip to content

Instantly share code, notes, and snippets.

@robert-wallis
Created August 27, 2018 02:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save robert-wallis/298ac886142e1d997373d9a72c930eb2 to your computer and use it in GitHub Desktop.
Save robert-wallis/298ac886142e1d997373d9a72c930eb2 to your computer and use it in GitHub Desktop.
What's faster `i < list.size()` or `i < size` where size is precomputed?
// My Results: VS 2017, Debug x86 Start-Without-Debugging, i7-4790K 4.0GHz 32.0GB RAM
//
// FunctionCondition 1 = 1783293664
// 369820712 ns
// VariableCondition 1 = 1783293664
// 229243798 ns
// FunctionCondition 2 = 1783293664
// 368293487 ns
// VariableCondition 2 = 1783293664
// 226769355 ns
// FunctionCondition 3 = 1783293664
// 370692645 ns
// VariableCondition 3 = 1783293664
// 226774989 ns
//
// Results, storing the size in a variable is consistently 39% faster.
#include "pch.h"
#include <iostream>
#include <vector>
#include <chrono>
using namespace std;
#define LOOPS 1000000
int FunctionCondition(vector<int>& list)
{
int sum = 0;
for (int i = 0; i < list.size(); i++) {
sum += list[i];
}
return sum;
}
int VariableCondition(vector<int>& list)
{
int sum = 0;
int size = list.size();
for (int i = 0; i < size; i++) {
sum += list[i];
}
return sum;
}
int main()
{
vector<int> list = vector<int>(LOOPS);
for (int i = 0; i < LOOPS; i++) {
list[i] = i;
}
{
auto start = chrono::steady_clock::now();
cout << "FunctionCondition 1 = " << FunctionCondition(list) << std::endl;
auto end = chrono::steady_clock::now();
cout << (end - start).count() << " ns" << std::endl;
}
{
auto start = chrono::steady_clock::now();
cout << "VariableCondition 1 = " << VariableCondition(list) << std::endl;
auto end = chrono::steady_clock::now();
cout << ( end - start ).count() << " ns" << std::endl;
}
{
auto start = chrono::steady_clock::now();
cout << "FunctionCondition 2 = " << FunctionCondition(list) << std::endl;
auto end = chrono::steady_clock::now();
cout << ( end - start ).count() << " ns" << std::endl;
}
{
auto start = chrono::steady_clock::now();
cout << "VariableCondition 2 = " << VariableCondition(list) << std::endl;
auto end = chrono::steady_clock::now();
cout << ( end - start ).count() << " ns" << std::endl;
}
{
auto start = chrono::steady_clock::now();
cout << "FunctionCondition 3 = " << FunctionCondition(list) << std::endl;
auto end = chrono::steady_clock::now();
cout << ( end - start ).count() << " ns" << std::endl;
}
{
auto start = chrono::steady_clock::now();
cout << "VariableCondition 3 = " << VariableCondition(list) << std::endl;
auto end = chrono::steady_clock::now();
cout << ( end - start ).count() << " ns" << std::endl;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment