DragonFly BSD
DragonFly kernel List (threaded) for 2005-02
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: C++ exception implementation (tangent)


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.

Attachment: pgp00016.pgp
Description: PGP signature



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]