fork download
  1. #include <vector>
  2. #include <iostream>
  3. #include <cstring>
  4.  
  5. int main()
  6. {
  7.  
  8. size_t num = 9999999;
  9.  
  10.  
  11. //-----------------Наполнение вектора произвольными значениями--------
  12.  
  13. std::vector<size_t>my_vector_rand;
  14. my_vector_rand.resize(num);
  15.  
  16. for (size_t i = 0; i < num; i++)
  17. {
  18. my_vector_rand[i] = rand() % 100;
  19. }
  20.  
  21. //-----------------------------------------------------------------------------------
  22.  
  23.  
  24. int clock1;
  25. int clock2;
  26.  
  27.  
  28.  
  29.  
  30.  
  31. //-----------------------------------------------------------------
  32. size_t* my_sizet_pionter1 = (size_t*)malloc(num * sizeof(size_t));
  33.  
  34. clock1 = clock();
  35. for (size_t i = 0; i < num; i++)
  36. {
  37. memcpy(&my_sizet_pionter1[i], &my_vector_rand[i], sizeof(size_t));
  38. }
  39. clock2 = clock();
  40. std::cout << "time_memcpy_without_all:" << clock2 - clock1 << std::endl;
  41. std::cout << my_sizet_pionter1[num - 1] << std::endl;
  42. //-----------------------------------------------------------------
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49. //-----------------------------------------------------------------
  50. size_t* my_sizet_pionter2 = (size_t*)malloc(num * sizeof(size_t));
  51.  
  52. memset(my_sizet_pionter2, 0, num * sizeof(size_t));
  53. std::cout << my_sizet_pionter2[num - 1] << std::endl; //Нужен, чтобы компилятор не оптимизировал вышестоящий memset.
  54.  
  55.  
  56. clock1 = clock();
  57. for (size_t i = 0; i < num; i++)
  58. {
  59. memcpy(&my_sizet_pionter2[i], &my_vector_rand[i], sizeof(size_t));
  60. }
  61. clock2 = clock();
  62. std::cout << "time_memcpy_memset_zero:" << clock2 - clock1 << std::endl;
  63. std::cout << my_sizet_pionter2[num - 1] << std::endl;
  64. //-----------------------------------------------------------------
  65.  
  66.  
  67.  
  68.  
  69. //-----------------------------------------------------------------
  70. size_t* my_sizet_pionter3 = (size_t*)malloc(num * sizeof(size_t));
  71.  
  72. memset(my_sizet_pionter3, 1, num * sizeof(size_t));
  73. std::cout << my_sizet_pionter3[num - 1] << std::endl; //Нужен, чтобы компилятор не оптимизировал вышестоящий memset.
  74.  
  75. clock1 = clock();
  76. for (size_t i = 0; i < num; i++)
  77. {
  78. memcpy(&my_sizet_pionter3[i], &my_vector_rand[i], sizeof(size_t));
  79. }
  80. clock2 = clock();
  81. std::cout << "time_memcpy_memset_one:" << clock2 - clock1 << std::endl;
  82. std::cout << my_sizet_pionter3[num - 1] << std::endl;
  83. //-----------------------------------------------------------------
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90. //-----------------------------------------------------------------
  91. size_t* my_sizet_pionter4 = (size_t*)malloc(num * sizeof(size_t));
  92.  
  93.  
  94. for (size_t i = 0; i < num; i++)
  95. {
  96. my_sizet_pionter4[i] = 0;
  97. }
  98. std::cout << my_sizet_pionter4[num - 1] << std::endl; //Нужен, чтобы компилятор не оптимизировал вышестоящий цикл.
  99.  
  100.  
  101.  
  102. clock1 = clock();
  103. for (size_t i = 0; i < num; i++)
  104. {
  105. memcpy(&my_sizet_pionter4[i], &my_vector_rand[i], sizeof(size_t));
  106. }
  107. clock2 = clock();
  108. std::cout << "time_memcpy_cycle_zero:" << clock2 - clock1 << std::endl;
  109. std::cout << my_sizet_pionter4[num - 1] << std::endl;
  110. //-----------------------------------------------------------------
  111.  
  112.  
  113.  
  114.  
  115.  
  116. //-----------------------------------------------------------------
  117. size_t* my_sizet_pionter5 = (size_t*)malloc(num * sizeof(size_t));
  118.  
  119.  
  120. for (size_t i = 0; i < num; i++)
  121. {
  122. my_sizet_pionter5[i] = 1;
  123. }
  124. std::cout << my_sizet_pionter5[num - 1] << std::endl; //Нужен, чтобы компилятор не оптимизировал вышестоящий цикл.
  125.  
  126.  
  127. clock1 = clock();
  128. for (size_t i = 0; i < num; i++)
  129. {
  130. memcpy(&my_sizet_pionter5[i], &my_vector_rand[i], sizeof(size_t));
  131. }
  132. clock2 = clock();
  133. std::cout << "time_memcpy_cycle_one:" << clock2 - clock1 << std::endl;
  134. std::cout << my_sizet_pionter5[num - 1] << std::endl;
  135. //-----------------------------------------------------------------
  136. }
  137.  
Success #stdin #stdout 0.23s 471860KB
stdin
Standard input is empty
stdout
time_memcpy_without_all:13545
7
0
time_memcpy_memset_zero:12367
7
72340172838076673
time_memcpy_memset_one:14014
7
0
time_memcpy_cycle_zero:14065
7
1
time_memcpy_cycle_one:13890
7