|
Boost Users : |
From: Elisha Berns (e.berns_at_[hidden])
Date: 2005-05-20 21:08:30
Thanks for the suggestion(s).
Elisha
> -----Original Message-----
> From: boost-users-bounces_at_[hidden] [mailto:boost-users-
> bounces_at_[hidden]] On Behalf Of Gottlob Frege
> Sent: Wednesday, May 18, 2005 8:58 PM
> To: boost-users_at_[hidden]
> Subject: Re: [Boost-users] Question about template optimization
>
> > Date: Wed, 18 May 2005 17:32:49 -0700
> > From: "Elisha Berns" <e.berns_at_[hidden]>
> > Subject: [Boost-users] Question about template optimization
> > To: "Boost" <boost-users_at_[hidden]>
> > Message-ID: <000001c55c0a$4966cf30$651aa8c0_at_INSPIRATION>
> > Content-Type: text/plain; charset="us-ascii"
> >
> > I need help with this one, even though it's a pure C++ question,
it's
> > about template optimization:
> >
> > If a template class has methods that DO NOT depend on or use the
type
> > parameter(s) of the template will the code for the methods
nevertheless
> > get instantiated separately for each unique instance of the template
> > class? For example, if there are 20 unique types used to declare 20
> > instances of template class X, do those methods get implemented 20
> > different times, needlessly, and cause a big code bloat?
> >
>
> what about 'non-dependent' methods with local statics:
>
> template <typename T> class C
> {
> int fooCount()
> {
> static int foo = 0;
> return ++foo;
> }
> };
>
> C<int> a;
> C<long> b;
>
> int fooA = a.fooCount();
> int fooB = b.fooCount();
>
> what is the value of fooB?
>
> If there was only 1 implementation of fooCount() I would expect fooB
> == 2. However, I think you will find fooB == 1.
>
> I suppose a compiler could still make the code common, but with
> separate static foo's, but then in general, there is nothing stopping
> a compiler from looking at 2 unrelated functions and saying, 'hey,
> lots of the code here looks the same; I should just refactor some of
> it out and remove some code bloat'. Not sure much of that ever
> happens. Reality is that once upon a time there were compiler
> switches for size vs speed, but speed won.
>
> > Even if most compilers are smart about this kind of thing, is it
still
> > better practice to separate from the template class (or method) all
of
> > the code that does not use the template type parameters?
> >
>
> Short answer: I suspect code bloat happens, and you should keep
> non-dependent code out of your templates if you care about it enough.
>
> > Thanks,
> >
> > Elisha Berns
> > e.berns_at_[hidden]
> >
> >
>
> Tony
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net