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