//~ 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 не у дел :( // при сильной накрузке и использовании swap 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; }