This is the mail archive of the
libstdc++@gcc.gnu.org
mailing list for the libstdc++ project.
Re: [PATCH] _M_replace (take3): better clean up + speed ups!!
- From: Paolo Carlini <pcarlini at unitus dot it>
- To: Benjamin Kosnik <bkoz at redhat dot com>
- Cc: libstdc++ at gcc dot gnu dot org
- Date: Mon, 10 Dec 2001 09:31:51 +0100
- Subject: Re: [PATCH] _M_replace (take3): better clean up + speed ups!!
- References: <Pine.SOL.3.91.1011209181547.1672A-100000@taarna.cygnus.com>
Benjamin Kosnik wrote:
> Hey Paolo. This looks good.
>
> > mainline
> > --------
> > Execution time of 100000 string::append(const string&) calls: 0.09 sec. <----
> > Execution time of 1000000 string::append(const string&) calls: 0.86 sec. <----
> > Execution time of 10000000 string::append(const string&) calls: 8.59 sec. <----
> >
> > mainline + this patch
> > ---------------------
> > Execution time of 100000 string::append(const string&) calls: 0.05 sec. <----
> > Execution time of 1000000 string::append(const string&) calls: 0.35 sec. <----
> > Execution time of 10000000 string::append(const string&) calls: 3.56 sec. <----
> >
> > 2.95.3
> > ------
> > Execution time of 100000 string::append(const string&) calls: 0.05 sec. <----
> > Execution time of 1000000 string::append(const string&) calls: 0.35 sec. <----
> > Execution time of 10000000 string::append(const string&) calls: 3.55 sec. <----
>
> So, with this patch, the last of the performance regressions WRT
> std::string between v2 and v3 is fixed? That would be great.
Almost ;-)
There is still a very minor slowdown for const char*, in fact. And of course v3 is better
than v2 as far as correctness is concerned (see, f.i., PR4354).
And this is only the beginning: I find Nathan's ideas about improving the performance in
special cases very stimulating and I think that very soon, v3 could be *faster* than v2
in such cases.
> > 2001-12-09 Paolo Carlini <pcarlini@unitus.it>
> > Nathan Myers <ncm@cantrip.org>
> >
> > * include/bits/basic_string.tcc (_M_replace_safe): New.
> > * include/bits/basic_string.tcc (_M_replace(input_iterator_tag),
> > append members): use it.
> > * include/bits/basic_string.tcc (_M_replace(forward_iterator_tag)): Remove.
> > * include/bits/basic_string.h: Adjust declarations.
>
> You can just list basic_string.tcc once.
Ok.
> Is there anyway you can add some documentation for this? That would be
> much appreciated.
For the time being I will put some comments in the code. Thanks for quick reviewing!
Cheers,
Paolo.