#include <iostream>
#include <time.h>
using namespace std;
__attribute__ ((noinline)) int f(int x) {
return x;
}
__attribute__ ((noinline)) int g(const int& x) {
return x;
}
const unsigned N = 200000000;
int main() {
clock_t start, end, loop_time;
unsigned throwaway = 0;
start = clock();
for (unsigned i = 0; i < N; ++i) {
throwaway += i;
}
end = clock();
cout << "Loop time: " << (end - start) << " ticks" << endl;
start = clock();
for (unsigned i = 0; i < N; ++i) {
throwaway += f(i);
throwaway -= i;
}
end = clock();
cout << "By value: " << (end - start) << " ticks" << endl;
start = clock();
for (unsigned i = 0; i < N; ++i) {
throwaway += g(i);
throwaway -= i;
}
end = clock();
cout << "By ref: " << (end - start) << " ticks" << endl;
cout << "Throwaway (to stop optimisation) = " << throwaway << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGltZS5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCl9fYXR0cmlidXRlX18gKChub2lubGluZSkpIGludCBmKGludCB4KSB7CglyZXR1cm4geDsKfQpfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKSBpbnQgZyhjb25zdCBpbnQmIHgpIHsKCXJldHVybiB4Owp9Cgpjb25zdCB1bnNpZ25lZCBOID0gMjAwMDAwMDAwOwoKaW50IG1haW4oKSB7CgljbG9ja190IHN0YXJ0LCBlbmQsIGxvb3BfdGltZTsKCXVuc2lnbmVkIHRocm93YXdheSA9IDA7CgkKIAlzdGFydCA9IGNsb2NrKCk7Cglmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTjsgKytpKSB7CgkJdGhyb3dhd2F5ICs9IGk7Cgl9CiAJZW5kID0gY2xvY2soKTsKCWNvdXQgPDwgIkxvb3AgdGltZTogIiA8PCAoZW5kIC0gc3RhcnQpIDw8ICIgdGlja3MiIDw8IGVuZGw7CgkKIAlzdGFydCA9IGNsb2NrKCk7Cglmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTjsgKytpKSB7CgkJdGhyb3dhd2F5ICs9IGYoaSk7CgkJdGhyb3dhd2F5IC09IGk7Cgl9CiAJZW5kID0gY2xvY2soKTsKCWNvdXQgPDwgIkJ5IHZhbHVlOiAiIDw8IChlbmQgLSBzdGFydCkgPDwgIiB0aWNrcyIgPDwgZW5kbDsKIAkKIAlzdGFydCA9IGNsb2NrKCk7Cglmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTjsgKytpKSB7CgkJdGhyb3dhd2F5ICs9IGcoaSk7CgkJdGhyb3dhd2F5IC09IGk7Cgl9CiAJZW5kID0gY2xvY2soKTsKCWNvdXQgPDwgIkJ5IHJlZjogIiA8PCAoZW5kIC0gc3RhcnQpIDw8ICIgdGlja3MiIDw8IGVuZGw7CgkKCWNvdXQgPDwgIlRocm93YXdheSAodG8gc3RvcCBvcHRpbWlzYXRpb24pID0gIiA8PCB0aHJvd2F3YXkgPDwgZW5kbDsKCXJldHVybiAwOwp9