fork download
  1. #include<vector>
  2. #include<chrono>
  3. #include<iostream>
  4. #include<memory>
  5. #include<iomanip>
  6.  
  7. constexpr size_t size = 10'000'000;
  8. constexpr size_t reps = 50;
  9.  
  10. auto time_vector() {
  11. auto start = std::chrono::steady_clock::now();
  12. {
  13. std::vector<double> a(size);
  14. for(size_t i = 0; i < size; i++) a[i] = 0;
  15. std::vector<double> b(size);
  16. for(size_t i = 0; i < size; i++) b[i] = 0;
  17. std::vector<double> c(size);
  18. for(size_t i = 0; i < size; i++) c[i] = 0;
  19.  
  20. for (size_t t = 0; t < reps; t++) {
  21. for (size_t i = 0; i < size; i++) {
  22. c[i] = a[i] + b[i];
  23. }
  24. }
  25. }
  26. auto end = std::chrono::steady_clock::now();
  27. return end - start;
  28. }
  29.  
  30. auto time_pointer() {
  31. auto start = std::chrono::steady_clock::now();
  32. {
  33. double * a = new double[size];
  34. for(size_t i = 0; i < size; i++) a[i] = 0;
  35. double * b = new double[size];
  36. for(size_t i = 0; i < size; i++) b[i] = 0;
  37. double * c = new double[size];
  38. for(size_t i = 0; i < size; i++) c[i] = 0;
  39.  
  40. for (size_t t = 0; t < reps; t++) {
  41. for (size_t i = 0; i < size; i++) {
  42. c[i] = a[i] + b[i];
  43. }
  44. }
  45.  
  46. delete[] a;
  47. delete[] b;
  48. delete[] c;
  49. }
  50. auto end = std::chrono::steady_clock::now();
  51. return end - start;
  52. }
  53.  
  54. auto time_unique_ptr() {
  55. auto start = std::chrono::steady_clock::now();
  56. {
  57. std::unique_ptr<double[]> a = std::make_unique<double[]>(size);
  58. for(size_t i = 0; i < size; i++) a[i] = 0;
  59. std::unique_ptr<double[]> b = std::make_unique<double[]>(size);
  60. for(size_t i = 0; i < size; i++) b[i] = 0;
  61. std::unique_ptr<double[]> c = std::make_unique<double[]>(size);
  62. for(size_t i = 0; i < size; i++) c[i] = 0;
  63.  
  64. for (size_t t = 0; t < reps; t++) {
  65. for (size_t i = 0; i < size; i++) {
  66. c[i] = a[i] + b[i];
  67. }
  68. }
  69. }
  70. auto end = std::chrono::steady_clock::now();
  71. return end - start;
  72. }
  73.  
  74. int main() {
  75. std::cout << "Pointer took " << std::setw(12) << time_pointer().count() << "ns" << std::endl;
  76. std::cout << "Vector took " << std::setw(12) << time_vector().count() << "ns" << std::endl;
  77. std::cout << "Unique Pointer took " << std::setw(12) << time_unique_ptr().count() << "ns" << std::endl;
  78. return 0;
  79. }
Success #stdin #stdout 3.97s 15232KB
stdin
Standard input is empty
stdout
Pointer took          1437017838ns
Vector took           1250983487ns
Unique Pointer took   1303497165ns