//~ time ./realloc_speed_test_c 50000 100000 //~ Success, iterations = 50000, nobj = 100000 //~ //~ real 0m0.313s //~ user 0m0.130s //~ sys 0m0.160s // при сильной накрузке и использовании swap std::string в разы проигрывает из-за дефрагментации #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; }