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

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

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 4.1.3
    • 4.2.0
    • 21. Strings
    • None
    • gcc 4.1.2 on Linux/x86_64

    • Patch Available
    • 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. string.patch
          6 kB
          Travis Vitek
        2. 21.string.append.perf.cpp
          2 kB
          Travis Vitek

        Issue Links

          Activity

            People

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

              Dates

                Created:
                Updated:
                Resolved: