* [Bug c++/38132] std::string is faster with -D_GLIBCXX_DEBUG=1 than without
2008-11-15 13:56 [Bug c++/38132] New: std::string is faster with -D_GLIBCXX_DEBUG=1 than without edwintorok at gmail dot com
@ 2008-11-15 13:58 ` edwintorok at gmail dot com
2008-11-15 15:43 ` [Bug c++/38132] extern template prohibits inlining rguenth at gcc dot gnu dot org
` (5 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: edwintorok at gmail dot com @ 2008-11-15 13:58 UTC (permalink / raw)
To: gcc-bugs
------- Comment #1 from edwintorok at gmail dot com 2008-11-15 13:56 -------
Created an attachment (id=16682)
--> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=16682&action=view)
example to illustrate
compile with g++ -O3, I get:
real 0m0.130s
user 0m0.100s
sys 0m0.028s
compile with g++ -D_GLIBCXX_DEBUG=1 -O3 I get:
real 0m0.080s
user 0m0.056s
sys 0m0.028s
If I explicitly instantiate the template, I get similar effect as of defining
_GLIBCXX_DEBUG:
template class basic_string<char>;
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38132
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/38132] extern template prohibits inlining
2008-11-15 13:56 [Bug c++/38132] New: std::string is faster with -D_GLIBCXX_DEBUG=1 than without edwintorok at gmail dot com
2008-11-15 13:58 ` [Bug c++/38132] " edwintorok at gmail dot com
@ 2008-11-15 15:43 ` rguenth at gcc dot gnu dot org
2009-04-16 22:10 ` pinskia at gcc dot gnu dot org
` (4 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2008-11-15 15:43 UTC (permalink / raw)
To: gcc-bugs
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|normal |enhancement
Keywords| |missed-optimization
Summary|std::string is faster with -|extern template prohibits
|D_GLIBCXX_DEBUG=1 than |inlining
|without |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38132
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug c++/38132] extern template prohibits inlining
2008-11-15 13:56 [Bug c++/38132] New: std::string is faster with -D_GLIBCXX_DEBUG=1 than without edwintorok at gmail dot com
2008-11-15 13:58 ` [Bug c++/38132] " edwintorok at gmail dot com
2008-11-15 15:43 ` [Bug c++/38132] extern template prohibits inlining rguenth at gcc dot gnu dot org
@ 2009-04-16 22:10 ` pinskia at gcc dot gnu dot org
2009-04-17 9:23 ` [Bug libstdc++/38132] basic_string.tcc methods not declared inline rguenth at gcc dot gnu dot org
` (3 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2009-04-16 22:10 UTC (permalink / raw)
To: gcc-bugs
------- Comment #2 from pinskia at gcc dot gnu dot org 2009-04-16 22:10 -------
Hmm, I think we need to implement extern template like C++0x says, I don't know
what it says about this point.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38132
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug libstdc++/38132] basic_string.tcc methods not declared inline
2008-11-15 13:56 [Bug c++/38132] New: std::string is faster with -D_GLIBCXX_DEBUG=1 than without edwintorok at gmail dot com
` (2 preceding siblings ...)
2009-04-16 22:10 ` pinskia at gcc dot gnu dot org
@ 2009-04-17 9:23 ` rguenth at gcc dot gnu dot org
2009-04-17 10:12 ` paolo dot carlini at oracle dot com
` (2 subsequent siblings)
6 siblings, 0 replies; 8+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2009-04-17 9:23 UTC (permalink / raw)
To: gcc-bugs
------- Comment #3 from rguenth at gcc dot gnu dot org 2009-04-17 09:23 -------
We had this for a short time but then see
2009-02-24 Richard Guenther <rguenther@suse.de>
PR c++/39242
* pt.c (instantiate_decl): Do not instantiate extern, non-inline
declared functions.
thus, if the functions would be marked inline we should still instantiate them
(otherwise we run into standard conformance issues like in that PR).
I also seem to remember that we hide implementation details of these functions
to be able to change them without breaking the ABI. But Paolo likely knows
more.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|c++ |libstdc++
Summary|extern template prohibits |basic_string.tcc methods not
|inlining |declared inline
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38132
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug libstdc++/38132] basic_string.tcc methods not declared inline
2008-11-15 13:56 [Bug c++/38132] New: std::string is faster with -D_GLIBCXX_DEBUG=1 than without edwintorok at gmail dot com
` (3 preceding siblings ...)
2009-04-17 9:23 ` [Bug libstdc++/38132] basic_string.tcc methods not declared inline rguenth at gcc dot gnu dot org
@ 2009-04-17 10:12 ` paolo dot carlini at oracle dot com
2009-04-17 10:28 ` paolo dot carlini at oracle dot com
2009-04-17 10:50 ` rguenth at gcc dot gnu dot org
6 siblings, 0 replies; 8+ messages in thread
From: paolo dot carlini at oracle dot com @ 2009-04-17 10:12 UTC (permalink / raw)
To: gcc-bugs
------- Comment #4 from paolo dot carlini at oracle dot com 2009-04-17 10:12 -------
Frankly, I don't think this is an issue. What we really want, is that all
inline functions get inlined anyway, debug mode or not, and this is correctly
happening, as far as I can see. Out of line functions are expected to not be
inlined, even at -O3, because of the extern templates, indeed. All in all, also
considering other metrics, like compile-time performance, code-size, and the
ABI-impact of anything having to do with strings, I don't believe this is going
to change any time soon. To repeat, the maintainers are well aware that, due to
extern inline, out of line functions are not inlined even at -O3, but that is
believed to be a good compromise, in general, outside the case of some special
micro-benchmarks. It's definitely a well known design choice, which existed for
string since the very beginning of the project.
For this specific micro-benchmark, the performance difference in debug-mode is
noticeable only in 4.3.x, it wasn't in 4.2.x, probably because we are now
inlining large functions a bit more easily. Actually the suppression of extern
inline in debug-mode is just an historical accident, necessary in order to make
sure debug-mode works also for the very special case of strings (vs all the
standard containers). Some maintainers argued at length *against* it, because
indeed it's sort of an hack, you can find something in the archive about it.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38132
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug libstdc++/38132] basic_string.tcc methods not declared inline
2008-11-15 13:56 [Bug c++/38132] New: std::string is faster with -D_GLIBCXX_DEBUG=1 than without edwintorok at gmail dot com
` (4 preceding siblings ...)
2009-04-17 10:12 ` paolo dot carlini at oracle dot com
@ 2009-04-17 10:28 ` paolo dot carlini at oracle dot com
2009-04-17 10:50 ` rguenth at gcc dot gnu dot org
6 siblings, 0 replies; 8+ messages in thread
From: paolo dot carlini at oracle dot com @ 2009-04-17 10:28 UTC (permalink / raw)
To: gcc-bugs
------- Comment #5 from paolo dot carlini at oracle dot com 2009-04-17 10:27 -------
Of course s/extern inline/extern template
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38132
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Bug libstdc++/38132] basic_string.tcc methods not declared inline
2008-11-15 13:56 [Bug c++/38132] New: std::string is faster with -D_GLIBCXX_DEBUG=1 than without edwintorok at gmail dot com
` (5 preceding siblings ...)
2009-04-17 10:28 ` paolo dot carlini at oracle dot com
@ 2009-04-17 10:50 ` rguenth at gcc dot gnu dot org
6 siblings, 0 replies; 8+ messages in thread
From: rguenth at gcc dot gnu dot org @ 2009-04-17 10:50 UTC (permalink / raw)
To: gcc-bugs
------- Comment #6 from rguenth at gcc dot gnu dot org 2009-04-17 10:50 -------
Thus, wontfix.
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution| |WONTFIX
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38132
^ permalink raw reply [flat|nested] 8+ messages in thread