代替の仮想関数呼び出しの実装
仮想テーブルと仮想ポインターのメカニズムは、C コンパイラで仮想関数の動的ディスパッチを実装するために一般的に使用されます。 、代替メソッドを使用するコンパイラはありますか?
コンパイラの実装
G および Microsoft Visual Studio を含む大多数の C コンパイラは、仮想テーブルと仮想テーブルを利用します。動的ディスパッチのためのポインタアプローチ。ただし、コンパイラが異なる方法で実装する場合がまれにあります。たとえば、一部のコンパイラは、仮想関数ポインタがオブジェクト自体の中に格納されるオブジェクト内ポインタに似たものを使用する場合があります。このような実装は、配列内のすべてのオブジェクトに対してマッピング テーブルに 1 つのエントリしか必要としないため、多数のベースと配列を持つ複雑なオブジェクトの場合により効率的である可能性があります。
オブジェクト サイズと仮想関数
「仮想関数だけを持つクラスの sizeof は、そのコンパイラ上のポインタ (この内部の vptr) のサイズになる」という記述は、一般に真実です。仮想ポインタは通常、オブジェクト。ただし、これは、仮想ディスパッチに異なるアプローチを使用する代替実装では必ずしも当てはまらない可能性があります。
結論として、仮想テーブルと仮想ポインタのメカニズムは、C コンパイラにおける動的ディスパッチの最も一般的な実装ですが、コンパイラは、特定の最適化シナリオに対して代替アプローチを採用する場合があります。使用される特定の実装は、ストレージ要件や検索効率などの要素に影響を与える可能性があります。
以上がC コンパイラでの仮想関数呼び出しの代替実装はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。