Exceptions in C : A Myth or Reality?
It's widely believed that exceptions in C are notoriously slow. However, is this still true in the context of C 98?
The Zero-Cost Model
The current exception handling model used in C is the Zero-Cost model. This model addresses the concerns raised by Andrei Alexandrescu by offering a more efficient approach.
The Zero-Cost model operates on the principle of side tables. Instead of setting up guards and explicit exception checks, the compiler generates a table that maps potential exception points to handlers. This means that exceptions can be thrown without incurring a performance penalty during normal operation.
Exceptional Path Costs
However, there is a performance cost when an exception does occur. Compared to the traditional "if (error)" strategy, the Zero-Cost model can be 10-20 times slower. This cost stems from cache misses during side-table retrieval and RTTI operations for handler determination.
Readability vs. Performance
While exceptions may have a slight performance impact on the exceptional path, their overall benefits in terms of readability and ease of error handling should be the primary consideration. Readable code promotes maintainability and reduces the risk of bugs.
Exceptional Handling Practices
Exceptions should be used when the caller is unable or unwilling to handle errors locally. In this situation, exceptions allow errors to be propagated up the call stack, enabling a higher-level handler to address the issue.
In certain cases, explicit error checks may be preferable. For example, map::find should not throw but instead return a checked_ptr that triggers an exception upon dereferencing if its value is null. This approach empowers the caller to choose between explicit checks and exception handling.
Ultimately, the choice between exceptions and explicit error checks should be guided by design considerations and the specific context of the code.
The above is the detailed content of Are C Exceptions Really Slow in C 98: Myth or Reality?. For more information, please follow other related articles on the PHP Chinese website!