dev/c/zalloc_ext/std_string_speed_test.cpp

52 lines
1.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//~ 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 <stdio.h>
#include <stdlib.h>
#include <string>
#include <vector>
#include <string>
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<std::string> 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;
}