inlining
superdan
super at dan.org
Fri Jul 18 08:51:35 PDT 2008
Don Wrote:
> JAnderson wrote:
> > JAnderson wrote:
> >> bobef wrote:
> >>> This has probably been asked many times before. If someone knows of
> >>> such discussion please paste me a link. Why not an 'inline'
> >>> attribute? We all know that the compiler can be stupid some times,
> >>> and even if it is not people may want to inline something that is
> >>> normally not appropriate for inlining. Auto inlining is fine, but
> >>> people should have control over such kind of things I believe.
> >>>
> >>> Regards, bobef
> >>
> >> May C++ compilers ignore the inline attribute because it has a better
> >> handle on when to inline. There have been some studies (does anyone
> >> have the links to these) where they've shown that most of the time the
> >> compiler can make a more intelligent guess then the average engineer.
> >>
> >> But that's C++. D does this automatic virtual's thing so its
> >> difficult to say whether the compiler can always make a good choice.
> >>
> >> -Joel
> >
> > I was working with MSVC++ the other day and found a couple of places
> > where it wasn't inlining the code and was running slow. So I placed a
> > few inlines around and *bam* that code started running faster. Then I
> > profiled the code as a whole to see how much of an improvement I'd
> > gained. However the game was actually running slower. It turned out
> > that inlining had simply shifted the bottneck into memory and the
> > program file size had got bigger, so the program cache was stalling all
> > the time.
> >
> > I'm not against inlining, I just think that you have to be really
> > careful when using it and understand its implications (ie use a
> > profiler), otherwise you could be making things worse.
> >
> > -Joel
>
> Yup. Code cache can easily become a bottleneck. Similarly, turning on
> 'optimise for speed' for a whole program is almost always a bad idea.
>
> More useful than 'inline', would be some way to tell the compiler 'this
> function is speed-critical'. If nothing else, it would have some
> documentation value.
just use the 'super' keyword:
void myfunc() super
{
}
:)
More information about the Digitalmars-d
mailing list