fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define N 10000000
  6. #define M 6
  7.  
  8. int cnt[N];
  9. int sum = 0;
  10.  
  11. void func1()
  12. {
  13. sum++;
  14. }
  15.  
  16. void func2()
  17. {
  18. sum--;
  19. }
  20.  
  21. clock_t now(void)
  22. {
  23. return clock();
  24. }
  25.  
  26. double ms(clock_t t1, clock_t t2)
  27. {
  28. return (t2 - t1) / CLOCKS_PER_SEC;
  29. }
  30.  
  31. int main(void)
  32. {
  33. void (*func[])(void) = { func1, func2 };
  34. int i, j;
  35. clock_t beg;
  36.  
  37. for (i = 0; i < N; i++)
  38. cnt[i] = i % 2; // call altenatively
  39.  
  40. puts("Call 0101010101....");
  41. beg = now();
  42. for (j = 0; j < M; j++)
  43. for (i = 0; i < N; i++)
  44. func[cnt[i]]();
  45. printf("%.3fms\n", ms(beg, now()));
  46.  
  47. printf("sum = %d\n", sum);
  48. sum = 0;
  49.  
  50. for (i = 0; i < N; i++)
  51. cnt[i] = (i % 3) ? 1 : 0; // call one in three times
  52.  
  53. puts("Call 001001001....");
  54. beg = now();
  55. for (j = 0; j < M; j++)
  56. for (i = 0; i < N; i++)
  57. func[cnt[i]]();
  58. printf("%.3fms\n", ms(beg, now()));
  59.  
  60. printf("sum = %d\n", sum);
  61. sum = 0;
  62.  
  63. for (i = 0; i < N; i++)
  64. cnt[i] = ((i % 4) == 0 || (i % 4) == 1) ? 1 : 0;
  65.  
  66. puts("Call 00110011....");
  67. beg = now();
  68. for (j = 0; j < M; j++)
  69. for (i = 0; i < N; i++)
  70. func[cnt[i]]();
  71. printf("%.3fms\n", ms(beg, now()));
  72.  
  73. printf("sum = %d\n", sum);
  74. sum = 0;
  75.  
  76. srand(time(NULL));
  77. for (i = 0; i < N; i++)
  78. cnt[i] = (rand() >> 3) % 2; // call in random
  79.  
  80. puts("Call in Random");
  81. beg = now();
  82. for (j = 0; j < M; j++)
  83. for (i = 0; i < N; i++)
  84. func[cnt[i]]();
  85. printf("%.3fms\n", ms(beg, now()));
  86.  
  87. printf("sum = %d\n", sum);
  88.  
  89. return 0;
  90. }
  91.  
Success #stdin #stdout 2.15s 41352KB
stdin
Standard input is empty
stdout
Call 0101010101....
0.000ms
sum = 0
Call 001001001....
0.000ms
sum = -19999992
Call 00110011....
0.000ms
sum = 0
Call in Random
0.000ms
sum = -3096