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


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.

Reply via email to