std::string::operator+=() slow
------------------------------

                 Key: STDCXX-492
                 URL: https://issues.apache.org/jira/browse/STDCXX-492
             Project: C++ Standard Library
          Issue Type: Bug
          Components: 21. Strings
    Affects Versions: 4.1.3
         Environment: gcc 4.1.2 on Linux/x86_64
            Reporter: Mark Brown


Comparing overloads of string::operator+=() in stdcxx with the same functions 
in gcc 4.1.2, stdcxx is up to twice slower than gcc:

$ time ./op_plus_equal-stdcxx 100000000 0

real    0m2.241s
user    0m1.932s
sys     0m0.204s
$ time ./op_plus_equal-stdcxx 100000000 1

real    0m2.540s
user    0m2.344s
sys     0m0.196s
$ time ./op_plus_equal-stdcxx 100000000 2

real    0m1.492s
user    0m1.308s
sys     0m0.184s
$ time ./op_plus_equal-gcc 100000000 0

real    0m0.883s
user    0m0.728s
sys     0m0.156s
$ time ./op_plus_equal-gcc 100000000 1

real    0m1.589s
user    0m1.424s
sys     0m0.168s
$ time ./op_plus_equal-gcc 100000000 2

real    0m1.131s
user    0m0.976s
sys     0m0.156s


#include <cassert>
#include <cstdlib>
#include <string>

int main (int argc, char *argv[])
{
    const int N = argc < 2 ? 1 : std::atoi (argv [1]);
    const int op = argc < 3 ? 0 : std::atoi (argv [2]);

    std::string str;

    const std::string x ("x");

    if (op == 0) {
        for (int i = 0; i < N; ++i)
            str += 'x';
    } else if (op == 1) {
        for (int i = 0; i < N; ++i)
            str += "x";
    } else {
        for (int i = 0; i < N; ++i)
            str += x;
    }

    assert (str.size () == std::size_t (N));
}


-- 
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