C++ exception implementation (tangent)

Greg 'groggy' Lehey grog at lemis.com
Tue Feb 15 15:15:10 PST 2005


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 at xxxxxxxxx for PGP public key.
See complete headers for address and phone numbers.
Attachment:
pgp00016.pgp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pgp00016.pgp
Type: application/octet-stream
Size: 187 bytes
Desc: "Description: PGP signature"
URL: <http://lists.dragonflybsd.org/pipermail/kernel/attachments/20050215/df5213e5/attachment-0016.obj>


More information about the Kernel mailing list