RTTI: 定量的な観点
C で RTTI を使用するとパフォーマンスが低下することは広く知られていますが、その規模に関する具体的な詳細は次のとおりです。とらえどころのないままだった。この記事は、RTTI のリソース消費を明らかにし、定量的データの必要性に対処することを目的としています。
実行時のパフォーマンスを最適化するには、可能な限り、dynamic_cast の代わりに static_cast を使用することをお勧めします。前者では std::type_info の 1 つの比較が必要ですが、後者では継承ツリーを走査して追加の比較を実行する必要があります。
GCC での RTTI の使用法
GCC では、 RTTI は、Linux および BSD プラットフォーム用の特定の ABI (アプリケーション バイナリ インターフェイス) に従います。この ABI は、型ごとに一貫性のある一意の typeid() オブジェクトを提供し、効率的な型比較を可能にします。通常、クラス vtable には型ごとの RTTI 構造体へのポインターが含まれるため、RTTI のランタイム メモリの使用量は最小限です。
GCC 4.4.3 に関する実験では、-fno-rtti を使用して RTTI を無効にすると実際にメモリの使用量が増加することが明らかになりました。テストプログラムのバイナリサイズ。これは、GCC の STL 実装が RTTI なしでは異なる動作をすることを示唆しています。これは、例外への依存が原因である可能性があります。
組み込みシステムへの影響
RAM、RTTI の使用量が限られている組み込みシステムの場合慎重に検討する必要があります。 GCC の優先 ABI ではメモリのオーバーヘッドは無視できますが、継承ツリーの走査と std::type_info オブジェクトの比較によるパフォーマンスへの影響は大きくなる可能性があります。
このようなシナリオでは、RTTI の必要性を評価し、調査することが重要です。使用量を最小限に抑える代替設計アプローチ。 RTTI が不可欠であると考えられる場合は、実行時のオーバーヘッドを削減するために、静的ファクトリー メソッドまたは仮想関数ディスパッチを実装することを検討してください。
以上がC での RTTI のパフォーマンスはどれくらいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。