[ https://issues.apache.org/jira/browse/STDCXX-518?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Travis Vitek closed STDCXX-518. ------------------------------- Resolution: Fixed I did a quick test to verify. I built the library and test with 'gmake CXXOPTS=_RWSTD_USE_STRING_ATOMIC_OPS', and then ran it. Here is the comparison... $ time ./string-copy.stdcxx 100000000 real 0m4.279s user 0m4.271s sys 0m0.003s $ time ./string-copy.gcc 100000000 real 0m4.392s user 0m4.378s sys 0m0.008s > std::string copy constructor slow > --------------------------------- > > Key: STDCXX-518 > URL: https://issues.apache.org/jira/browse/STDCXX-518 > Project: C++ Standard Library > Issue Type: Improvement > Components: 21. Strings > Affects Versions: 4.1.3 > Environment: gcc 4.1.2, x86_64 > Reporter: Mark Brown > Assignee: Travis Vitek > Fix For: 4.2.1 > > > When thread safety is enabled in stdcxx the string copy constructor is more > than ten times slower than when it's not, and twice as slow as the same copy > constructor in gcc 4.1.2 on Linux (x86_64), but slightly faster than with > STLport 5.1.3. The timings were done on Intel x86_64 at 2.4GHz: > BUILDMODE=shared,optimized: > $ time LD_LIBRARY_PATH=../lib ./string-copy 100000000 > real 0m0.482s > user 0m0.480s > sys 0m0.000s > BUILDMODE=shared,optimized,pthread: > $ time LD_LIBRARY_PATH=../lib ./string-copy 100000000 > real 0m10.157s > user 0m10.041s > sys 0m0.032s > gcc 4.1.2 with -O2 -m64: > $ time ./string-copy.gcc 100000000 > real 0m4.280s > user 0m4.260s > sys 0m0.020s > gcc 4.1.2 with STLport 5.1.3 (-D_REENTRANT -O2 -m64 -lpthread): > $ time ./string-copy.stlport 100000000 > real 0m12.479s > user 0m12.473s > sys 0m0.004s > #include <cassert> > #include <cstdlib> > #include <string> > int main (int argc, char *argv[]) > { > const unsigned long n = argc < 2 ? 0 : std::strtoul (argv [1], 0, 10); > std::string strings [256]; > const std::size_t num_strings = sizeof strings / sizeof *strings; > for (unsigned long i = 0; i != num_strings; ++i) > strings [i].assign (i, 'x'); > for (unsigned long i = 0; i < n; ++i) { > const std::size_t length = i % num_strings; > const std::string str (strings [length]); > assert (str.size () == length); > } > } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.