You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by "Travis Vitek (JIRA)" <ji...@apache.org> on 2007/09/13 10:56:32 UTC

[jira] Assigned: (STDCXX-492) std::string::operator+=() slow

     [ https://issues.apache.org/jira/browse/STDCXX-492?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Travis Vitek reassigned STDCXX-492:
-----------------------------------

    Assignee: Travis Vitek

> 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
>            Assignee: Travis Vitek
>             Fix For: 4.2
>
>
> 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.