diff --git a/c/zalloc_ext/std_string_speed_test.cpp b/c/zalloc_ext/std_string_speed_test.cpp new file mode 100644 index 0000000..987d3e6 --- /dev/null +++ b/c/zalloc_ext/std_string_speed_test.cpp @@ -0,0 +1,49 @@ +//~ Success, iterations = 50000, nobj = 100000 +//~ +//~ real 0m0.818s +//~ user 0m0.290s +//~ sys 0m0.520s + +//~ при увеличении с 50000 до 60000 std::string лезут в своп, дождаться завершения не получится, +//~ в то время как realloc(), xrealloc() и zrealloc() спокойно работают при кратном увеличении nobj. +//~ во всех тестах zrealloc показала наилучшие результаты :), приблизительно в 1.5 раза быстрее xrealloc() и realloc(). +//~ std::string не у дел :( + +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + if (argc != 3) { + fputs("Usage: realloc_speed_test_cpp iterations nobj\n", stderr); + exit(-1); + } + + size_t iterations = (size_t)atoi(argv[1]); + size_t nobj = (size_t)atoi(argv[2]); + + std::vector v(nobj); + + //std::string app; for(size_t k=0; k<1000; k++) app += ' '; + + size_t i, j, idx; + for (i = 0; i < iterations; i++) { + idx = (size_t)(rand() % (int)nobj); + try { + //v[idx] += v[idx];//app; + v[idx].resize(i); + //for (j = 0; j < i; j++) + // v[idx] += ' '; + } catch(...) { + fprintf(stderr, "Alloc error at i = %lu\n", i); + exit(-1); + } + } + + printf("Success, iterations = %lu, nobj = %lu\n", iterations, nobj); + + return EXIT_SUCCESS; +} diff --git a/c/zalloc_ext/zalloc_speed_test_c.c b/c/zalloc_ext/zalloc_speed_test_c.c new file mode 100644 index 0000000..ac361af --- /dev/null +++ b/c/zalloc_ext/zalloc_speed_test_c.c @@ -0,0 +1,49 @@ +//~ time ./realloc_speed_test_c 50000 100000 +//~ Success, iterations = 50000, nobj = 100000 +//~ +//~ real 0m0.313s +//~ user 0m0.130s +//~ sys 0m0.160s + +#include +#include +#include + +#include "zalloc.h" +#include "zalloc_ext.h" + +size_t optimal_zalloc_size(size_t size); + +int main(int argc, char *argv[]) +{ + if (argc != 3) { + fputs("Usage: realloc_speed_test_cpp iterations nobj\n", stderr); + exit(-1); + } + + size_t iterations = (size_t)atoi(argv[1]); + size_t nobj = (size_t)atoi(argv[2]); + + void **p = malloc(sizeof(void *) * nobj); + memset(p, 0, sizeof(void *) * nobj); + + //void *app = zmalloc(1000); + + size_t i, j, idx; + for (i = 0; i < iterations; i++) { + idx = (size_t)(rand() % (int)nobj); + //p[idx] = zalloc_append(p[idx], p[idx]); + zrealloc_inplace(&p[idx], i); + //for (j = 0; j < i; j++) + // p[idx] = zalloc_append8(p[idx], ' '); + } + + for (i = 0; i < nobj; i++) + zfree(p[i]); + + free(p); + + printf("Success, iterations = %lu, nobj = %lu\n", iterations, nobj); + + return EXIT_SUCCESS; +}