3

テンプレートクラスを使用して30の異なる定義を作成するとします。私の質問は、実際のコードは非常に似ているか、まったく同じですが、バイナリ(binary size = sizeof(template_class)x 30)で30の実際のクラスにコンパイルされるかどうかです。

もしそうなら、そして実行時に、私のプログラムはメモリにロードされます。これらの30個のインスタンスをループします(定義ごとに1個のインスタンスを初期化したと仮定します)。実際にはメモリ内に30個のコピーがあり、コードのほとんどが同じであるため、CPU命令キャッシュがリロードされますか?

    template<typename msg_policy, int id>
    class temp_class_test : public msg_policy
            //codes, methods, and members
    };

    template class temp_class_test<A_policy,1>;
    template class temp_class_test<B_policy, 2>;
4

3 に答える 3

2

30の奇数クラスが非常に類似している場合は、コードの重複を避ける必要があります。たとえば、テンプレートパラメータidは、他の点では同一のクラスを区別するためのスタブである場合があります。この場合、すべてのクラスを再定義する必要はありませんがid、実装から継承するだけで済みます。

namespace implementation {
  template<typename p> class test {
    // implementation
  };
}
template<typename p, int id>
class temp_class_test : public implementation::test<p>
{
   // any additional code dependent on id
   // any non-inheritable code (constructors)
};

その場合、コンパイラは基本クラスのメソッドごとに1つのバイナリのみを生成し、id単に異なるを区別するのに役立ちますtemp_class_test

于 2013-03-18T11:08:36.510 に答える
2
于 2013-03-18T11:05:42.237 に答える
0

剖検完了。そのため、アプリケーションにストレスがかかると、アプリケーションのパフォーマンスが非常に悪くなります。私のCPUが永久にキャッシュミスを経験したためです。

于 2013-03-18T11:17:11.470 に答える