|From:||"Greg 'groggy' Lehey" <grog@xxxxxxxxx>|
|Date:||Wed, 16 Feb 2005 09:42:34 +1030|
On Friday, 4 February 2005 at 14:08:46 +0100, Joerg Sonnenberger wrote: > On Thu, Feb 03, 2005 at 09:32:29PM -0500, David Cuthbert wrote: >> Greg 'groggy' Lehey wrote: >>> You'll notice that [C++ exceptions are] implemented with >>> setjmp()/longjmp(). >> >> Is this the current state of g++? I knew somebody was going to pick up on this, and I should have researched more carefully. You're probably right (I still haven't checked; been pretty busy lately): my information is about 10 years old. > The current GCC C++ frontend supports multiple mechanisms for > exception handling, setjmp/longjmp is one of them. OK, this seems plausible. >> I thought -- perhaps incorrectly -- that EDG-based compilers used lookup >> tables based on the PC. This imposes no performance hit in the cases >> where the exception isn't invoked -- it's popular for this reason. I >> thought that g++ was heading in this direction, but I haven't been >> following the changes terribly closely. > > I'm pretty sure this is exactly the case. IIRC there's still a minor > performance penalty for exception setup, but it's very small compared > to the older approach. I'd be interested in details there. My understanding is that setjmp saves processor registers in a jmpbuf, and that longjmp restores them. Neither sounds exactly high-overhead, certainly less than a chain of function returns. Greg -- Finger grog@xxxxxxxxx for PGP public key. See complete headers for address and phone numbers.
Description: PGP signature