fork(5) 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. std::vector<double> b(size);
  15. std::vector<double> c(size);
  16.  
  17. for (size_t t = 0; t < reps; t++) {
  18. for (size_t i = 0; i < size; i++) {
  19. c[i] = a[i] + b[i];
  20. }
  21. }
  22. }
  23. auto end = std::chrono::steady_clock::now();
  24. return end - start;
  25. }
  26.  
  27. auto time_pointer() {
  28. auto start = std::chrono::steady_clock::now();
  29. {
  30. double * a = new double[size];
  31. double * b = new double[size];
  32. double * c = new double[size];
  33.  
  34. for (size_t t = 0; t < reps; t++) {
  35. for (size_t i = 0; i < size; i++) {
  36. c[i] = a[i] + b[i];
  37. }
  38. }
  39.  
  40. delete[] a;
  41. delete[] b;
  42. delete[] c;
  43. }
  44. auto end = std::chrono::steady_clock::now();
  45. return end - start;
  46. }
  47.  
  48. auto time_unique_ptr() {
  49. auto start = std::chrono::steady_clock::now();
  50. {
  51. std::unique_ptr<double[]> a = std::make_unique<double[]>(size);
  52. std::unique_ptr<double[]> b = std::make_unique<double[]>(size);
  53. std::unique_ptr<double[]> c = std::make_unique<double[]>(size);
  54.  
  55. for (size_t t = 0; t < reps; t++) {
  56. for (size_t i = 0; i < size; i++) {
  57. c[i] = a[i] + b[i];
  58. }
  59. }
  60. }
  61. auto end = std::chrono::steady_clock::now();
  62. return end - start;
  63. }
  64.  
  65. int main() {
  66. std::cout << "Vector took " << std::setw(12) << time_vector().count() << "ns" << std::endl;
  67. std::cout << "Pointer took " << std::setw(12) << time_pointer().count() << "ns" << std::endl;
  68. std::cout << "Unique Pointer took " << std::setw(12) << time_unique_ptr().count() << "ns" << std::endl;
  69. return 0;
  70. }
Success #stdin #stdout 3.24s 15232KB
stdin
Standard input is empty
stdout
Vector took           1442575273ns
Pointer took           542265103ns
Unique Pointer took   1280087558ns