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

std::string copy constructor slow

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 4.1.3
    • Fix Version/s: 4.2.1
    • Component/s: 21. Strings
    • Labels:
      None
    • Environment:

      gcc 4.1.2, x86_64

    • Severity:
      Inefficiency

      Description

      When thread safety is enabled in stdcxx the string copy constructor is more than ten times slower than when it's not, and twice as slow as the same copy constructor in gcc 4.1.2 on Linux (x86_64), but slightly faster than with STLport 5.1.3. The timings were done on Intel x86_64 at 2.4GHz:

      BUILDMODE=shared,optimized:
      $ time LD_LIBRARY_PATH=../lib ./string-copy 100000000

      real 0m0.482s
      user 0m0.480s
      sys 0m0.000s

      BUILDMODE=shared,optimized,pthread:
      $ time LD_LIBRARY_PATH=../lib ./string-copy 100000000

      real 0m10.157s
      user 0m10.041s
      sys 0m0.032s

      gcc 4.1.2 with -O2 -m64:
      $ time ./string-copy.gcc 100000000

      real 0m4.280s
      user 0m4.260s
      sys 0m0.020s

      gcc 4.1.2 with STLport 5.1.3 (-D_REENTRANT -O2 -m64 -lpthread):
      $ time ./string-copy.stlport 100000000

      real 0m12.479s
      user 0m12.473s
      sys 0m0.004s

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

      int main (int argc, char *argv[])
      {
      const unsigned long n = argc < 2 ? 0 : std::strtoul (argv [1], 0, 10);

      std::string strings [256];

      const std::size_t num_strings = sizeof strings / sizeof *strings;
      for (unsigned long i = 0; i != num_strings; ++i)
      strings [i].assign (i, 'x');

      for (unsigned long i = 0; i < n; ++i)

      { const std::size_t length = i % num_strings; const std::string str (strings [length]); assert (str.size () == length); }

      }

        Attachments

          Issue Links

            Activity

              People

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

                Dates

                • Created:
                  Updated:
                  Resolved: