Boost logo

Boost Users :

From: Aleksey Gurtovoy (agurtovoy_at_[hidden])
Date: 2006-02-20 04:04:35


Vinzenz 'evilissimo' Feenstra writes:
> I've written a little Meta Template Program which should calculate the
> first 3 perfect numbers. ( range 1 - 500 )
>
> The code is compilable if you use the range 1 - 30 really fast and
> works correctly. But I've tried to compile the code but I can't get it
> finished.
>
> Someone tried it on a Machine with 40 GB RAM and it now compiles for
> more than 12 hours and uses more than 7.1 GB RAM ( the compilation )
>
> I've tried it by myself with g++ 3.4.x and g++ 4.0.x and with VC++ 7.1
>
> The code works on all tested compilers if the range would be 1 - 30 but
> If the range is 1 - 500 VC++ says:
>
> d:\boost\vc71\include\boost-1_33_1\boost\mpl\aux_\preprocessed\plain\apply_wrap.hpp(48):
> fatal error C1204: compiler limit: internal structure overflow.
>
> ( This seems to be a known bug in VC++
> http://support.microsoft.com/default.aspx?scid=kb;en-us;883655 )
>
> and g++ compiles and compiles and uses more and more RAM.
>
> Is the code really so evil slow or is it a compiler Bug in g++?

The former: your algorithm is basically O(n^2). For n=500, that's a
lot of work for the compiler.

-- 
Aleksey Gurtovoy
MetaCommunications Engineering

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