nezvers

Function pointer array VS switch

Aug 11th, 2021 (edited)
404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.55 KB | None | 0 0
  1. #include "stdio.h"
  2. #include "stdlib.h"
  3. #include "time.h"
  4.  
  5.  
  6. void f0(int *x){
  7.     *x += 1;
  8. }
  9. void f1(int *x){
  10.     *x += 2;
  11. }
  12. void f2(int *x){
  13.     *x += 3;
  14. }
  15. void f3(int *x){
  16.     *x += 4;
  17. }
  18. void f4(int *x){
  19.     *x += 5;
  20. }
  21. void f5(int *x){
  22.     *x += 6;
  23. }
  24. void f6(int *x){
  25.     *x += 7;
  26. }
  27. void f7(int *x){
  28.     *x += 8;
  29. }
  30. void f8(int *x){
  31.     *x += 9;
  32. }
  33. void f9(int *x){
  34.     *x += 10;
  35. }
  36. void f10(int *x){
  37.     *x -= 1;
  38. }
  39. void f11(int *x){
  40.     *x -= 2;
  41. }
  42. void f12(int *x){
  43.     *x -= 3;
  44. }
  45. void f13(int *x){
  46.     *x -= 4;
  47. }
  48. void f14(int *x){
  49.     *x -= 5;
  50. }
  51. void f15(int *x){
  52.     *x -= 6;
  53. }
  54. void f16(int *x){
  55.     *x -= 7;
  56. }
  57. void f17(int *x){
  58.     *x -= 8;
  59. }
  60. void f18(int *x){
  61.     *x -= 9;
  62. }
  63. void f19(int *x){
  64.     *x -= 10;
  65. }
  66. void f20(int *x){
  67.     *x *= 1;
  68. }
  69. void f21(int *x){
  70.     *x *= 2;
  71. }
  72. void f22(int *x){
  73.     *x *= 3;
  74. }
  75. void f23(int *x){
  76.     *x *= 4;
  77. }
  78. void f24(int *x){
  79.     *x *= 5;
  80. }
  81. void f25(int *x){
  82.     *x /= 6;
  83. }
  84. void f26(int *x){
  85.     *x /= 5;
  86. }
  87. void f27(int *x){
  88.     *x /= 4;
  89. }
  90. void f28(int *x){
  91.     *x /= 3;
  92. }
  93. void f29(int *x){
  94.     *x /= 2;
  95. }
  96.  
  97.  
  98. #define TEST_ITTERATIONS 100000000
  99.  
  100. #define RAND_COUNT 2000
  101. int randi[RAND_COUNT];
  102. #define FUNC_COUNT 30
  103. void (*func[])(int*) = {
  104.     f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29
  105. };
  106.  
  107. void set_rand(){
  108.     srand (time(NULL)); // Seed random
  109.     for (int i = 0; i < RAND_COUNT; i++){
  110.         randi[i] = rand() % FUNC_COUNT;
  111.     }
  112. }
  113.  
  114. void test_pointers(){
  115.     int x = 0;
  116.     for (int i = 0; i < TEST_ITTERATIONS; i++){
  117.         func[randi[i % RAND_COUNT]](&x);
  118.     }
  119.     printf("Pointer result: %d\n", x);
  120. }
  121.  
  122. void test_switch(){
  123.     int x = 0;
  124.     for (int i = 0; i < TEST_ITTERATIONS; i++){
  125.         switch (randi[i % RAND_COUNT]){
  126.             case 0:
  127.                 f0(&x);
  128.                 break;
  129.             case 1:
  130.                 f1(&x);
  131.                 break;
  132.             case 2:
  133.                 f2(&x);
  134.                 break;
  135.             case 3:
  136.                 f3(&x);
  137.                 break;
  138.             case 4:
  139.                 f4(&x);
  140.                 break;
  141.             case 5:
  142.                 f5(&x);
  143.                 break;
  144.             case 6:
  145.                 f6(&x);
  146.                 break;
  147.             case 7:
  148.                 f7(&x);
  149.                 break;
  150.             case 8:
  151.                 f8(&x);
  152.                 break;
  153.             case 9:
  154.                 f9(&x);
  155.                 break;
  156.             case 10:
  157.                 f10(&x);
  158.                 break;
  159.             case 11:
  160.                 f11(&x);
  161.                 break;
  162.             case 12:
  163.                 f12(&x);
  164.                 break;
  165.             case 13:
  166.                 f13(&x);
  167.                 break;
  168.             case 14:
  169.                 f14(&x);
  170.                 break;
  171.             case 15:
  172.                 f15(&x);
  173.                 break;
  174.             case 16:
  175.                 f16(&x);
  176.                 break;
  177.             case 17:
  178.                 f17(&x);
  179.                 break;
  180.             case 18:
  181.                 f18(&x);
  182.                 break;
  183.             case 19:
  184.                 f19(&x);
  185.                 break;
  186.             case 20:
  187.                 f20(&x);
  188.                 break;
  189.             case 21:
  190.                 f21(&x);
  191.                 break;
  192.             case 22:
  193.                 f22(&x);
  194.                 break;
  195.             case 23:
  196.                 f23(&x);
  197.                 break;
  198.             case 24:
  199.                 f24(&x);
  200.                 break;
  201.             case 25:
  202.                 f25(&x);
  203.                 break;
  204.             case 26:
  205.                 f26(&x);
  206.                 break;
  207.             case 27:
  208.                 f27(&x);
  209.                 break;
  210.             case 28:
  211.                 f28(&x);
  212.                 break;
  213.             case 29:
  214.                 f29(&x);
  215.                 break;
  216.         }
  217.     }
  218.     printf("switch result: %d\n", x);
  219. }
  220.  
  221. int main(){
  222.     printf("Itterations: %d\n", TEST_ITTERATIONS);
  223.     set_rand();
  224.     float startTime;
  225.     float endTime;
  226.     float timeElapsed;
  227.     startTime = (float)clock()/CLOCKS_PER_SEC;
  228.     test_switch();
  229.     endTime = (float)clock()/CLOCKS_PER_SEC;
  230.     timeElapsed = endTime - startTime;
  231.     printf("Switch time: %f\n", timeElapsed);
  232.    
  233.     startTime = (float)clock()/CLOCKS_PER_SEC;
  234.     test_pointers();
  235.     endTime = (float)clock()/CLOCKS_PER_SEC;
  236.     timeElapsed = endTime - startTime;
  237.     printf("Pointer time: %f\n", timeElapsed);
  238.     return 0;
  239. }
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
Add Comment
Please, Sign In to add comment