fork(2) download
  1. #include <chrono>
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cstring>
  5. using namespace std;
  6. using namespace chrono;
  7.  
  8. int testcases[0xffff];
  9.  
  10. void prepare_testcases()
  11. {
  12. for(size_t i = 0; i < sizeof(testcases); i++)
  13. {
  14. testcases[i] = rand();
  15. }
  16. }
  17.  
  18. inline int cmp_normal(int i, int j)
  19. {
  20. return i == j;
  21. }
  22.  
  23. inline int cmp_mem(int i, int j)
  24. {
  25. return memcpy(&i, &j, sizeof(int)) == 0;
  26. }
  27.  
  28. high_resolution_clock::duration test(int(cmpfunc)(int, int))
  29. {
  30. auto tbegin = high_resolution_clock::now();
  31. volatile int sink;
  32. for(size_t i = 1; i < sizeof(testcases); i++)
  33. sink = cmpfunc(testcases[i], testcases[i-1]);
  34. auto tend = high_resolution_clock::now();
  35. return tend - tbegin;
  36. }
  37.  
  38. int main()
  39. {
  40. prepare_testcases();
  41.  
  42. cout << "Normal comparison took " << duration_cast<milliseconds>(test(cmp_normal)).count() << " milliseconds." << endl;
  43. cout << "Memory comparison took " << duration_cast<milliseconds>(test(cmp_mem)).count() << " milliseconds." << endl;
  44. }
Runtime error #stdin #stdout 0s 16304KB
stdin
Standard input is empty
stdout
Standard output is empty