------- Comment #7 from rguenth at gcc dot gnu dot org 2006-03-03 10:29 ------- Note that using functions as in fibconst is not really an efficient way to do this. Still, with gcc 4.1.0 you now have the ability to use
template<unsigned long long L> inline __attribute__((flatten)) unsigned long long fibconst() { return fibconst<L - 1>() + fibconst<L - 2>(); } which will result in one call in main and a fibconst that returns the constant requested. Of course for big numbers you'll hit interesting quadraticness in time and memory required to build the program - so the limits in place actually prevent you from running into this issue. It's like [EMAIL PROTECTED]:/tmp> ~/bin/maxmem2.sh /space/rguenther/install/gcc-4.1.0/bin/gcc -O2 -S t.C -DVAL=23 total: 149886 kB [EMAIL PROTECTED]:/tmp> ~/bin/maxmem2.sh /space/rguenther/install/gcc-4.1.0/bin/gcc -O2 -S t.C -DVAL=24 total: 238102 kB [EMAIL PROTECTED]:/tmp> ~/bin/maxmem2.sh /space/rguenther/install/gcc-4.1.0/bin/gcc -O2 -S t.C -DVAL=25 total: 385738 kB [EMAIL PROTECTED]:/tmp> ~/bin/maxmem2.sh /space/rguenther/install/gcc-4.1.0/bin/gcc -O2 -S t.C -DVAL=26 total: 623094 kB so, an exponential growth in memory usage due to the way we're doing the inlining. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14703