Advertisement
Guest User

Untitled

a guest
Jan 25th, 2021
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.28 KB | None | 0 0
  1. #include <time.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <vector>
  5. #include "cauldron/stretchy-buffer.h"
  6. #include "kvec.h"
  7. #define STRETCHY_BUFFER_NO_SHORT_NAMES
  8. #include "evec.h"
  9. #include "stretchy_buffer.h"
  10.  
  11.  
  12. int
  13. main()
  14. {
  15.     int M = 1, N = 10000000, i, j;
  16.     clock_t t;
  17.  
  18.     typedef Sb(int) SbInt;
  19.  
  20.  
  21.     for (i = 0; i < M; ++i) {
  22.         int *array = (int*)malloc(N * sizeof(int));
  23.         for (j = 0; j < N; ++j) array[j] = j;
  24.         free(array);
  25.     }
  26.  
  27.     t = clock();
  28.     for (i = 0; i < M; ++i) {
  29.         int *array = NULL;
  30.         stb_sb_add(array, N);
  31.         for (j = 0; j < N; ++j) array[j] = j;
  32.         stb_sb_free(array);
  33.     }
  34.     printf("stb_sb: %.32g sec\n",
  35.            (float)(clock() - t) / CLOCKS_PER_SEC);
  36.     t = clock();
  37.     for (i = 0; i < M; ++i) {
  38.         int *array = NULL;
  39.         for (j = 0; j < N; ++j)
  40.             stb_sb_push(array, j);
  41.         stb_sb_free(array);
  42.     }
  43.     printf("stb_sb_push: %.32g sec\n",
  44.            (float)(clock() - t) / CLOCKS_PER_SEC);
  45.  
  46.  
  47.     t = clock();
  48.     for (i = 0; i < M; ++i) {
  49.         int *array = evini(sizeof *array, N);
  50.         for (j = 0; j < N; ++j)
  51.             evpsh(array, 1);
  52.         evfree(array);
  53.     }
  54.     printf("evec: %.32g sec\n",
  55.            (float)(clock() - t) / CLOCKS_PER_SEC);
  56.     t = clock();
  57.     for (i = 0; i < M; ++i) {
  58.         int *array = NULL;
  59.         for (j = 0; j < N; ++j)
  60.             evpsh(array, 1);
  61.         evfree(array);
  62.     }
  63.     printf("evec_push: %.32g sec\n",
  64.            (float)(clock() - t) / CLOCKS_PER_SEC);
  65.  
  66.  
  67.     t = clock();
  68.     for (i = 0; i < M; ++i) {
  69.         SbInt array;
  70.         sb_initlen(array, N);
  71.         for (j = 0; j < N; ++j) array.at[j] = j;
  72.         sb_free(array);
  73.     }
  74.     printf("sb: %.32g sec\n",
  75.            (float)(clock() - t) / CLOCKS_PER_SEC);
  76.     t = clock();
  77.     for (i = 0; i < M; ++i) {
  78.         SbInt array = {0};
  79.         for (j = 0; j < N; ++j)
  80.             sb_push(array, j);
  81.         sb_free(array);
  82.     }
  83.     printf("sb_push: %.32g sec\n",
  84.            (float)(clock() - t) / CLOCKS_PER_SEC);
  85.  
  86.  
  87.     t = clock();
  88.     for (i = 0; i < M; ++i) {
  89.         kvec_t(int) array;
  90.         kv_init(array);
  91.         kv_resize(int, array, N);
  92.         for (j = 0; j < N; ++j) kv_a(int, array, j) = j;
  93.         kv_destroy(array);
  94.     }
  95.     printf("kv_a: %.32g sec\n",
  96.            (float)(clock() - t) / CLOCKS_PER_SEC);
  97.     t = clock();
  98.     for (i = 0; i < M; ++i) {
  99.         kvec_t(int) array;
  100.         kv_init(array);
  101.         for (j = 0; j < N; ++j)
  102.             kv_push(int, array, j);
  103.         kv_destroy(array);
  104.     }
  105.     printf("kv_push: %.32g sec\n",
  106.            (float)(clock() - t) / CLOCKS_PER_SEC);
  107.  
  108.  
  109.  
  110.     t = clock();
  111.     for (i = 0; i < M; ++i) {
  112.         int *array = (int*)malloc(N * sizeof(int));
  113.         for (j = 0; j < N; ++j) array[j] = j;
  114.         free(array);
  115.     }
  116.     printf("c preallocated: %.32g sec\n",
  117.            (float)(clock() - t) / CLOCKS_PER_SEC);
  118.     t = clock();
  119.     for (i = 0; i < M; ++i) {
  120.         int *array = 0, max = 0;
  121.         for (j = 0; j < N; ++j) {
  122.             if (j == max) {
  123.                 max = !max? 1 : max << 1;
  124.                 array = (int*)realloc(array, sizeof(int)*max);
  125.             }
  126.             array[j] = j;
  127.         }
  128.         free(array);
  129.     }
  130.     printf("c dynamic: %.32g sec\n",
  131.            (float)(clock() - t) / CLOCKS_PER_SEC);
  132.  
  133.     t = clock();
  134.     for (i = 0; i < M; ++i) {
  135.         std::vector<int> array;
  136.         array.reserve(N);
  137.         for (j = 0; j < N; ++j) array[j] = j;
  138.     }
  139.     printf("C++ preallocated: %.32g sec\n",
  140.            (float)(clock() - t) / CLOCKS_PER_SEC);
  141.     t = clock();
  142.     for (i = 0; i < M; ++i) {
  143.         std::vector<int> array;
  144.         for (j = 0; j < N; ++j) array.push_back(j);
  145.     }
  146.     printf("C++ dynamic: %.32g sec\n",
  147.            (float)(clock() - t) / CLOCKS_PER_SEC);
  148.  
  149.  
  150.     return 0;
  151. }
  152.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement