$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [Boost-users] metafunction invocation performance
From: David Abrahams (dave_at_[hidden])
Date: 2009-02-26 10:02:20
On Jul 4, 2008, at 7:36 AM, Hicham Mouline wrote:
> The solution to this one is provided by Joaquin, in his reply below:
>
> I tried compiling your code with MSVC++ 8.0 and it is indeed  
> incredibly slow. After playing a little with the code I realized  
> that MPL views are the culprit here: for some reason it is much  
> faster to fold on a vector-based computation rather than a view:
I learned an interesting and somewhat depressing fact from Doug Gregor  
recently.  Most compilers don't use a canonical representation of  
types.  That is, in most compilers, int* and add_pointer<int>::type  
occupy separate pieces of storage, and the complier jumps through some  
complicated hoops when it needs to evaluate them for sameness.  Of  
course that also means that vector<int*> and  
vector<add_pointer<int>::type> are represented separately, etc.  That  
can totally skewer the gains of memoization, among other things.f
Apparently recent versions of GCC have canonical type representation,  
and so does Clang (for what that's worth -- no C++ yet), but I betcha  
MS doesn't, and that would help explain why views cost more.
-- David Abrahams BoostPro Computing http://boostpro.com