Travis Vitek (JIRA)
Tue, 08 Jan 2008 13:58:55 -0800
[
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.