gjb@cs.brown.edu (08/13/89)
Some recent work I've been doing with C++ and the InterViews
user-interface toolkit has made me wonder how expensive inheritance
is. I realize that a virtual function is slower than a non-virtual,
but does the depth of the class hierarchy affect speed?
For example, let's say I create:
class A
{
public:
virtual void Method();
void Another_Method();
};
class B : public A
{
public:
virtual void Method();
};
class C : public B
{
public:
virtual void Method();
}
I realize that calling A::Method() will be more expensive than
calling A::Another_Method(). But is calling B::Method() slower than
A::Method()? And will calling C::Method() be slower still? If so, how
much slower? Twice as slow as B::Method()? Three times as slow as
A::Method()? Of course, I'm only speaking of the overhead involved in
calling the functions -- not the time complexity of the function itself.
Could someone explain how this works? Does anyone have statistics? I'd
love to know. Thanks in advance.
-Greg
+----------------------------------------------------+
Greg Brail Work: (401)863-7692
Internet: gjb@cs.brown.edu BITNET: gjb@browncs.bitnet
UUCP: ..uunet!brunix!gjb Home: (401)831-3736zweig@brutus.cs.uiuc.edu (Johnny Zweig) (09/11/89)
gjb@cs.brown.edu writes: >Some recent work I've been doing with C++ and the InterViews >user-interface toolkit has made me wonder how expensive inheritance >is. I realize that a virtual function is slower than a non-virtual, >but does the depth of the class hierarchy affect speed? >For example, let's say I create: > [a class with a virtual function that gets redefined in a subclass...] > [Will the subclass's virtual function be more expensive to call?] No. Virtual function tables are (as far as I know or can imagine) flattened -- each (subsubsub...)class just has a big list of pointers. In the example, the virtual function would just be the value of the nth (probably 0th) pointer in the v-table. Same banana in the subclass, or any other {sub}*classes. -Johnny
turk@Apple.COM (Ken "Turk" Turkowski) (10/03/89)
In article <1989Sep11.002541.13902@brutus.cs.uiuc.edu> zweig@brutus.cs.uiuc.edu (Johnny Zweig) writes: >gjb@cs.brown.edu writes: > >>Some recent work I've been doing with C++ and the InterViews >>user-interface toolkit has made me wonder how expensive inheritance >>is. I realize that a virtual function is slower than a non-virtual, >>but does the depth of the class hierarchy affect speed? >> [Will the subclass's virtual function be more expensive to call?] > >No. Virtual function tables are (as far as I know or can imagine) >flattened -- each (subsubsub...)class just has a big list of pointers. In >the example, the virtual function would just be the value of the nth >(probably 0th) pointer in the v-table. Same banana in the subclass, or >any other {sub}*classes. Constructors, however, get slower and slower, even when there is no constructor. It's amazing how often I get the message: MyClass::MyClass() too complex for inlining. when the class and all of its members are doing nothing during their construction but returning. The C code is littered with the address of every object's constructor loaded into a register. -- Ken Turkowski @ Apple Computer, Inc., Cupertino, CA Internet: turk@apple.com Applelink: TURKOWSKI1 UUCP: sun!apple!turk