[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Poor exception handling performance
From: |
Mears |
Subject: |
Poor exception handling performance |
Date: |
Sat, 27 Oct 2007 04:49:33 -0000 |
User-agent: |
G2/1.0 |
I spent some time profiling exception performance on Solaris 10 with
Sun's CC and two different versions of g++. The setup was a class
that threw an exception (an int value) in its constructor if an
argument was out of range. The main program basically dynamically
allocated objects of that type a variable number of times. I tested
three different scenarios:
1. Exception not thrown, and no try/catch in the main program
2. Exception not thrown, and a try/catch surrounding the "new"
statement.
3. Exception thrown, and a try/catch surrounding the "new" statement
(catch was a no-op).
The compilers I used were (information from version options):
CC - Sun C++ 5.8 Patch 121017-10 2007/02/21
g++ - 3.4.3 (csl-sol210-3_4-brach+sol_rpath)
g++ - 2.95.3 20010315 (release)
The performance of g++ when not throwing an exception (scenarios 1 &
2) was acceptable IMO. CC definitely had an edge, but all were
quick. However, when I started testing scenario 3, g++ was
horrendous. For example , when calling the constructor 1,000,000
times (and thus throwing 1,000,000 exceptions), on average CC
completed the test program in 2.3 seconds, g++ 2.95.3 completed in
15.9 seconds, and g++ v3.4.3 completed in 22.1 seconds. I was
extremely surprised to see g++ nearly 10 times slower at handling
throw statements than CC, especially since it was much closer with
exception overhead when not throwing.
- Poor exception handling performance,
Mears <=