Uploaded image for project: 'C++ Standard Library'
  1. C++ Standard Library
  2. STDCXX-492

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

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 4.1.3
    • Fix Version/s: 4.2.0
    • Component/s: 21. Strings
    • Labels:
      None
    • Environment:

      gcc 4.1.2 on Linux/x86_64

    • Patch Info:
      Patch Available
    • Severity:
      Inefficiency

      Description

      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));
      }

        Attachments

        1. 21.string.append.perf.cpp
          2 kB
          Travis Vitek
        2. string.patch
          6 kB
          Travis Vitek

          Issue Links

            Activity

              People

              • Assignee:
                vitek Travis Vitek
                Reporter:
                mbrown Mark Brown
              • Votes:
                0 Vote for this issue
                Watchers:
                1 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: