delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1997/04/26/07:04:55

From: R DOT G DOT Morgan AT ncl DOT ac DOT uk
Newsgroups: comp.os.msdos.djgpp
Subject: RE: Style AND speed in C++? How? Please, I need some radical ideas on this one!
Date: 24 Apr 1997 12:14:55 GMT
Organization: University of Newcastle upon Tyne
Lines: 37
Sender: n6368757 AT glen13 DOT ncl DOT ac DOT uk (R.G. Morgan)
Distribution: world
Message-ID: <5jnirv$h2p@whitbeck.ncl.ac.uk>
References: <861717941.0523452.0@[194.129.18.166]>
NNTP-Posting-Host: glen13.ncl.ac.uk
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

Hate to disagree with Shawn, but I think that in gcc, as in many other compilers
(I've not checked my idea in the source),  having virtual functions in a
class creates a virtual table. This virtual table is then referenced by a virtual
table pointer in the object (struct) generated.  When a virtual function is called
, the virtual pointer in the struct is derefenced to the virtual table, which 
contains pointers to the appropriate functions.  This saves space on a
per-instance basis (eg for a class with 2 virtual functions, 1 pointer extra is 
embedded in the class, as opposed to 2), but costs time.

I'd agree with Doug Eleveld:  use function pointers in your struct for absolute
speed, if there will only be a few instances.  Of course, this means setting
them up yourself, rather than letting the compiler do all the work.

In article <861717941.0523452.0@[194.129.18.166]>, 
Shawn Hargreaves <shawn AT talula DOT demon DOT co DOT uk> writes:
|> Doug Eleveld writes:
|> > I'm pretty sure that the overhead of a virtual function call could cause 
|> > you some problems.  It's OK to use virtual function for setup or 
|> > something but don't use it for putpixel or linedraw.  The fastest and 
|> > neatest way that I can think of is to keep function pointers for all the 
|> > fast drawing functions, and fill them in in the constructor of whatever 
|> > video card.
|> 
|> You seem to be missing the point here: virtual functions _are_ function
|> pointers! That's all the virtual keyword means: it just tells the C++ 
|> compiler to allocate some space in the structure, fill it in with a pointer
|> to the code, and use this pointer whenever you call the function rather
|> than branching directly to it. That's exactly the same thing as using
|> function pointers directly in C, as I did in Allegro, but easier because
|> most of the hassle is taken care of by the compiler...
|> 
|> 	Shawn Hargreaves.
|> 
|> 
	
			R DOT G DOT Morgan AT ncl DOT ac DOT uk

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019