Bruno Lalande | 23 May 00:21
Picon

Re: [math] pow redux and observations

> I have to react to this.  There is something called aliasing that prevent compilers to optimize, and
passing builtins by const ref is generally NOT a good idea performance wise.
>
> There is something called the const-forwarding type that resolves to value for built-ins and const refs
for UDT that might be useful here.

Usually to solve this problem I simply use call_traits::param_type, is
there any objection to this?

> Finally, something that no one seems to be concerned about in this thread, is the cost of all these
templates in terms of byte object code.  In such a low-level header, you can expect all these templates to
end up in every UoR in your libraries, linked together into an executable.  Keeping positive_ and
negative_ out of your template names is going to save that many bytes in your object.  You may think its
nothing.  I've seen placeholders (_1 to _10) defined as static const Placeholder<N> take up to .5M for
essentially nothing (it's an empty class!)  We saved that .5MB by declaring them extern, as is done in
Boost.  So the rule is: keep it as simple and short as possible while remaining readable code.

OK I'll take a closer look at how the executable size changes with the
different implementations, indeed it's a point I've forgotten a bit...

Bruno
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost


Gmane