Re: c++ exceptions

Kaz Kylheku <>
Fri, 13 Nov 2009 21:16:04 +0000 (UTC)

          From comp.compilers

Related articles
c++ exceptions (allstars) (2009-11-09)
Re: c++ exceptions (Kaz Kylheku) (2009-11-13)
Re: c++ exceptions (Kaz Kylheku) (2009-11-13)
| List of all articles for this month |

From: Kaz Kylheku <>
Newsgroups: comp.compilers
Date: Fri, 13 Nov 2009 21:16:04 +0000 (UTC)
Organization: A noiseless patient Spider
References: 09-11-032
Keywords: C++, errors, performance
Posted-Date: 15 Nov 2009 17:45:55 EST

On 2009-11-10, allstars <> wrote:
> hello
> i've seen a post in other group (android-ndk)
> and i have a couple questions
> 1. How would c++ exception support slow down C applications?

In a number of ways.

The function call ABI for C may have to be altered somehow in order to
support unwinding through the call frames of C functions. This ise
because even though though the C functions don't use exception
handling, the C++ code may have to traverse a call stack with C
functions in order to find a handler.

Of course, this could be a code generation option for the C.

Being able to traverse the call stack is beneficial to C anyway,
because it's needed for supporting things like coverage and profiling
tools, and in general, technologies that require call frame

The ABI of the C compiler might choose to implement setjmp and longjmp
in a way which plays nicely with C++ exceptions, and unwinding. So C
programs using setjmp and longjmp will may have their performance
affected by this by the relationship between the C compiler and the
C++ compiler. Traditionally, setjmp implementations simply dump a
bunch of registers into a little block of memory. The longjmp is very
fast; it just restores the context. A setjmp/longjmp that work
together with C++ will likely have a faster setjmp, since setjmp won't
have to dump as much machine state into a buffer. But the longjmp may
be slower since instead of just reloading some machine registers, it
will unwind the call stack all the way up to where the setjmp is, call
C++ destructors along the way and so on. (Perhaps the longjmp may even
be interceptable as a C++ exception using catch(...) { } and re-thrown
u using throw; ).

> 2. why 'The exception-enabled code generated for ARM by gcc was
> unacceptable' ??

I won't answer this because I'd have to read that whole thread to discover
who has the opinion that something is unacceptable and for what reasons.

How about, just dig out the e-mail addesses and ask those people to

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.