On Friday 07 March 2003 01:27 pm, Guillaume Laurent wrote: > On Friday 07 March 2003 19:15, Maks Orlovich wrote: > > Pointless use of virtual functions is of course wasteful. > > Last time I actually tried to measure how "wasteful" that was (repeated > calls to a function doing a sqrt(), virtual or not), I had to raise the > number of iterations to 1 million before there was any measurable > difference (about 1 second out of 20 or so). That was on a P-III 600 MHz. > > 'virtual' overhead will be drowned in statistic noise as soon as your > function is doing anything serious, like IO. Yes, IIRC, someone measured it to be like 1.1 times of a regular function call on typical implementation; I really should bookmark that report on C++ performance, it's very interesting. I do think that the overhead of not making something virtual when it should have been will hurt one so much that making everything virtual would be better (i.e. by forcing extra work or code dup in place of a neat tiny inheritance integration). Anyway, my point was that trying to do it manually is a bad idea, since it assumes one can do it better than the compiler. I doubt that, especially for such simple set ups, where the compiler is probably using techniques that represent the state of the art when its ABI was designed for simple things like this. And of course it can incorporate all sorts of platform-specific knowledge in, too. One place where I do think it matters is trivial inline accessors -- it can be non-trivially faster to store something into a base classes member and access it inline instead of having a virtual return it. Of course, this only matters when the relevant path is incredibly hot, and should only be done based on profile feedback.