On Wed, Jun 02, 2010 at 06:17:25PM +0100, Richard Earnshaw wrote:
> 
> On Mon, 2010-05-31 at 10:02 -0700, Mark Mitchell wrote:
> > I think virtual functions are on the edge; quite useful, but do result
> > in the compiler adding a pointer to data objects and in uninlinable
> > indirect calls at run-time.  Therefore, I would avoid them in the
> > initial subset of C++ used in GCC.
> 
> We do, of course, have one very big 'virtual function' table in gcc --
> namely the target hooks.  It would be a shame if that couldn't be made
> into a proper class with virtual functions by some arbitrary rule --
> it's a perfect example of when they should be considered.

And the advantage would be?

Currently targetm is a struct with function pointers, so calling
targetm.hook_xyz ();
means reading a pointer from &targetm + off, then calling it.
If you make it a class with virtual functions and targetm
would be an object of that class, then
targetm.hook_xyz ();
call means reading pointer from &targetm (the vtable pointer), followed
by reading the function pointer from the virtual table, then calling it.
One extra memory read for hook call.

        Jakub

Reply via email to