Efficient dynamic dispatch without virtual function tables: the SmallEiffel compiler
Craig Black
cblack at ara.com
Fri Mar 7 10:03:44 PST 2008
"Kris" <foo at bar.com> wrote in message news:fqrvp5$1iu8$1 at digitalmars.com...
>
> "Craig Black" <cblack at ara.com> wrote in message
> news:fqrt7n$1aj2$1 at digitalmars.com...
>>I found this article on the internet. It concurs with my theories about
>>the overhead of virtual function calls. Here's the abstract:
>>
>> SmallEiffel is an Eiffel compiler which uses a fast simple type inference
>> mechanism to remove most late binding calls, replacing them by static
>> bindings. Starting from the system's entry point, it compiles only
>> statically living code, which saves compiling and then removing dead
>> code. As the whole system is analyzed at compile time, multiple
>> inheritance and genericity do not cause any overhead.SmallEiffel features
>> a coding scheme which eliminates the need for virtual function tables.
>> Dynamic dispatch is implemented without any array access but uses a
>> simple static binary branch code. We show that this implementation makes
>> it possible to use modern hardware very efficiently. It also allows us to
>> inline more calls even when dynamic dispatch is required. Some more
>> dispatch sites are removed after the type inference algorithm has been
>> performed, if the different branches of a dispatch site lead to the same
>> code.The advantage of this approach is that it greatly speeds up
>> execution time and considerably decreases the amount of generated code.
>> -Craig
>
>
> We've seen the results of this quite clearly in D, where xml DOM parsing
> is actually faster than SAX parsing (which should cause some folks to do a
> double-take about now). The reason is that the DOM parser avoids vcalls,
> whereas the SAX parser currently does not. That overhead is sufficient to
> offset all the extra work performed by the DOM parser. Yeah, this is a
> perhaps special-case, but an interesting one all the same?
Intersting case. I would disagree that this is a special case. Virtual
function calls are a common bottleneck iobject-oriented code.
More information about the Digitalmars-d
mailing list