fork(1) download
  1. ///----------------------------------------------------------------------------|
  2. /// Стенд для замера пииисек.
  3. ///------------------------------------------------------------------------arr[]
  4. /// const int ROW = 10;
  5. /// const int COL = 10;
  6. /// int arr[ROW*COL];
  7. ///START_PERFOMANCE;//=============================//
  8. /// for (int i = 0; i < ROW; i++)
  9. /// { for(int j = 0; j < COL; j++)
  10. /// { arr [i*j+j] = i + j;
  11. /// }
  12. /// }
  13. ///
  14. ///-----------------------------------------------------------------------vector
  15. /// const int ROW = 10;
  16. /// const int COL = 10;
  17. /// std::vector<std::vector<int>> arr(ROW, std::vector<int>(COL));
  18. ///START_PERFOMANCE;//=================================================//
  19. /// for (int i = 0; i < ROW; i++)
  20. /// { for(int j = 0; j < COL; j++)
  21. /// { arr [i][j] = i + j;
  22. /// }
  23. /// }
  24. ///
  25. ///----------------------------------------------------------------------------|
  26. #include <stdio.h>
  27. #include <vector>
  28.  
  29. ///----------------------------------------------------------------------------|
  30. /// Мерилка тактов проца.
  31. ///----------------------------------------------------------------------------:
  32. typedef unsigned long long ull;
  33. inline ull rdtsc()
  34. {
  35. #ifdef __BORLANDC__
  36. #endif
  37.  
  38. #ifdef _MSC_VER
  39. unsigned clock = 0;
  40. __asm rdtsc;
  41. __asm mov[clock], eax;
  42. return clock;
  43. #endif
  44.  
  45. #ifdef __GNUC__
  46. unsigned int lo, hi;
  47. asm volatile ("rdtsc\n" : "=a" (lo), "=d" (hi));
  48. return ((ull)hi << 32) | lo;
  49. #endif
  50. }
  51.  
  52. ///----------------------------------------------------------------------------|
  53. /// Для удобства.
  54. ///----------------------------------------------------------------------------:
  55. #define START_PERFOMANCE ull t1 = rdtsc(); static ull ss_ = 0xffffffff;\
  56.   bool b = false
  57. #define END_PERFOMANCE ull v = rdtsc(); v -= t1;\
  58.   if(ss_ > v){ b = true; ss_ = v;}
  59.  
  60. ///----------------------------------------------------------------------------|
  61. /// Хулиган.
  62. ///----------------------------------------------------------------------------:
  63. ull CoderHuligan(char* s)
  64. { int nw = 0;
  65. char *p=s;
  66.  
  67. const int ROW = 10;
  68. const int COL = 10;
  69.  
  70. int arr[ROW*COL];
  71.  
  72. START_PERFOMANCE;//=============================//
  73. for (int i = 0; i < ROW; i++)
  74. { for(int j = 0; j < COL; j++)
  75. { arr [i*j+j] = i + j;
  76. }
  77. }
  78. END_PERFOMANCE;//===============================//
  79.  
  80. if(b)
  81. { printf ("arr[] : ");
  82. printf ("%10u \n", (unsigned)ss_);
  83. b = false;
  84. }
  85. return ss_;
  86. }
  87.  
  88. ///----------------------------------------------------------------------------|
  89. /// my.
  90. ///----------------------------------------------------------------------------:
  91. ull my(char* s)
  92. { int nw = 0;
  93. char *p = s;
  94.  
  95. const int ROW = 10;
  96. const int COL = 10;
  97. std::vector<std::vector<int>> arr(ROW, std::vector<int>(COL));
  98. START_PERFOMANCE;//=================================================//
  99. for (int i = 0; i < ROW; i++)
  100. { for(int j = 0; j < COL; j++)
  101. { arr [i][j] = i + j;
  102. }
  103. }
  104. END_PERFOMANCE;//===================================================//
  105.  
  106. if(b)
  107. {
  108. printf ("vector: ");
  109. printf ("%10u \n", (unsigned)ss_);
  110. b = false;
  111. }
  112. return ss_;
  113. }
  114.  
  115. ///----------------------------------------------------------------------------|
  116. /// Наш кролик.
  117. ///----------------------------------------------------------------------------:
  118. char s[]="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed";
  119.  
  120. ///----------------------------------------------------------------------------|
  121. /// Start.
  122. ///----------------------------------------------------------------------------:
  123. int main()
  124. { ull m,c;
  125.  
  126. //-------------------------------|
  127. // Quiet, testing! |
  128. //-------------------------------:
  129. for(int i = 0; i < 10000000; ++i)
  130. { c = CoderHuligan(s);
  131. m = my (s);
  132. }
  133.  
  134. //-------------------------------|
  135. // Banners is redy... |
  136. //-------------------------------:
  137. const char* str[] = {"WIN <<<--!!!", "looser...", "friendship won!"};
  138. int i1, i2;
  139. (m > c) ? (i1 = 0, i2 = 1) :
  140. ((m == c)?(i1 = 2, i2 = 2) : (i1 = 1, i2 = 0));
  141.  
  142. //-------------------------------|
  143. // Finish result. |
  144. //-------------------------------:
  145. printf ("\nFinish the race-------------------:\n");
  146. printf ("arr[] : %u - ", (unsigned)c);
  147. printf ("%s\n", str[i1]);
  148. printf ("vector: %u - ", (unsigned)m);
  149. printf ("%s\n", str[i2]);
  150.  
  151. //-------------------------------|
  152. // Show efficiency. |
  153. //-------------------------------:
  154. double ef = 100.0/double(c) * double(m) - 100.0;
  155. printf ("\nProfitable arr[]: %2.2f%%\n\n", ef);
  156.  
  157. //_getch();
  158. return 0;
  159. }
  160.  
Success #stdin #stdout 3.2s 4540KB
stdin
Standard input is empty
stdout
arr[] :           24 
vector:          304 
vector:          268 
vector:          264 
vector:          224 
vector:          208 
vector:          204 
vector:          188 

Finish the race-------------------:
arr[] : 24 - WIN <<<--!!!
vector: 188 - looser...

Profitable arr[]: 683.33%