std::string::append() slow
--------------------------

                 Key: STDCXX-493
                 URL: https://issues.apache.org/jira/browse/STDCXX-493
             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


This is a similar problem to STDCXX-492: all overloads of string::append() are 
slower than the same overloads in gcc:

$ let n=0; while [ $n -lt 3 ]; do time LD_LIBRARY_PATH=../lib 
./append-stdcxx-4.1.3 500000000 $n; let n=`expr $n + 1`; done

real    0m11.221s
user    0m9.941s
sys     0m1.104s

real    0m13.065s
user    0m11.661s
sys     0m1.236s

real    0m7.837s
user    0m6.660s
sys     0m1.160s

$ let n=0; while [ $n -lt 3 ]; do time ./append-gcc-4.1.2 500000000 $n; let 
n=`expr $n + 1`; done

real    0m4.865s
user    0m4.172s
sys     0m0.692s

real    0m7.617s
user    0m6.920s
sys     0m0.696s

real    0m5.787s
user    0m5.068s
sys     0m0.720s

The program I used to do the comaprison is below:

#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.append (1, 'x');
    } else if (op == 1) {
        for (int i = 0; i < N; ++i)
            str.append ("x");
    } else {
        for (int i = 0; i < N; ++i)
            str.append (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