Efficient dynamic dispatch without virtual function tables: the SmallEiffel compiler
Craig Black
cblack at ara.com
Fri Mar 7 09:14:22 PST 2008
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
More information about the Digitalmars-d
mailing list