Created
August 27, 2018 02:04
-
-
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?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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