Re: [tuxracer-main] New features
Status: Beta
Brought to you by:
jfpatry
From: Steve B. <sjb...@ai...> - 2000-10-11 04:12:13
|
John Cupitt wrote: > > Steve Baker wrote: > > (At this point, someone who doesn't know what they are talking about will > > chime in and tell us that this is a bad thing "because C++ is slower than C") > > Bear in mind that every significant C compiler out there for the past 5 > > years has been a C++ compiler with some of the syntax analyser turned off. > > I realise that this is completely off topic, but ... ;-) > > It's true that it's possible in principle to compile C with a C++ > compiler and have it go at the same speed, but in practice all C++ > compilers I've ever used have been slower (mostly due to extra stack > manips on function calls to support exception handling that don't get > optimised away). Like I said - *someone* always says this. Look, write a simple program that calls a function - compile it with (for example) gcc and then with g++, use the '-S' option that writes out human readable mnemonics instead of binary. I did exactly that this lunchtime when I saw your email. Findings: With *NO* optimisation at all, the C++ compiler generated two extra JMP instructions at the end of every function that C didn't. (I think this is what you are talking about) - however, with any level of optimisation above level 1, these disappear - and the ONLY differences between the two '.s' files were that the C++ function names have been 'mangled' to have type identification for their parameters - and in C++ mode there seemed to be a lot of redundant labels. However, with any reasonable optimisation level, I was NEVER able to see a difference in the calling sequence for 'normal' functions. The only other exception was in a 'fprintf' I'd used - which had some extra junk around it in C++ - I put that down to the subtle difference in the meaning of '...' in C and C++ functions. Just for kicks, I left the code compiled without optimisations and wrote a 1 billion time 'for' loop containing a function call to a function that incremented a global. At 1 billion times around the loop, my 400MHz Xeon took ~25 seconds for both C and C++. Sometimes C would win by a half second, sometimes C++ would win by about the same. I had to run the program for more than 5 minutes to get a consistantly measurable speed difference. I think in this extreme test (I can't imagine a harder test) there could be perhaps a half percent speed difference between C and C++ - and then only with optimisation turned off. I did a quick test on a Silicon Graphics IRIX machine - with the result that even with optimisation turned off, the C and C++ compilers generated identical machine code whatever (C) code I fed them. This isn't a suprise because (as I said before) there is really only one compiler. gcc == g++ and cc == CC. -- Steve Baker HomeEmail: <sjb...@ai...> WorkEmail: <sj...@li...> HomePage : http://web2.airmail.net/sjbaker1 Projects : http://plib.sourceforge.net http://tuxaqfh.sourceforge.net http://tuxkart.sourceforge.net http://prettypoly.sourceforge.net |