C の例外 : 神話か現実?
C の例外は非常に遅いと広く信じられています。しかし、これは C 98 のコンテキストでも当てはまりますか?
ゼロコスト モデル
C で使用されている現在の例外処理モデルはゼロコスト モデルです。 。このモデルは、より効率的なアプローチを提供することで、Andrei Alexandrescu 氏が提起した懸念に対処しています。
ゼロコスト モデルは、サイド テーブルの原理に基づいて動作します。ガードと明示的な例外チェックを設定する代わりに、コンパイラーは、潜在的な例外ポイントをハンドラーにマップするテーブルを生成します。これは、通常の操作中にパフォーマンスを低下させることなく例外をスローできることを意味します。
例外的なパス コスト
ただし、例外が発生するとパフォーマンスが低下します。従来の「if (エラー)」戦略と比較して、ゼロコスト モデルは 10 ~ 20 倍遅くなる可能性があります。このコストは、ハンドラー決定のためのサイドテーブル取得および RTTI 操作中のキャッシュ ミスに起因します。
可読性とパフォーマンス
例外は、パフォーマンスにわずかな影響を与える可能性があります。例外的なパスの場合、読みやすさとエラー処理の容易さの点での全体的な利点を主に考慮する必要があります。読みやすいコードは保守性を高め、バグのリスクを軽減します。
例外処理の実践
例外は、呼び出し元がローカルでエラーを処理できない、またはローカルでエラーを処理したくない場合に使用する必要があります。この状況では、例外によりエラーがコール スタックに伝播され、上位レベルのハンドラーが問題に対処できるようになります。
場合によっては、明示的なエラー チェックが望ましい場合があります。たとえば、map::find はスローするのではなく、値が null の場合に参照解除時に例外をトリガーする Checked_ptr を返す必要があります。このアプローチにより、呼び出し元は明示的なチェックと例外処理のどちらかを選択できるようになります。
最終的に、例外と明示的なエラー チェックの選択は、設計上の考慮事項とコードの特定のコンテキストによって決定される必要があります。
以上がC 98 の C 例外は本当に遅いのか: 神話か現実か?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。