プログラムとかデジタル系趣味とか

template実装のdllexportとパフォーマンス

通常、あまりtemplateクラスをdllexportすることはないと思いますが、仮にした場合、VCコンパイラが警告を言ってきます。
DLL利用側のコンパイル時に、ヘッダーの内容が変わっているとテンプレート実装が変わってしまう可能性があるので、その警告です。

実は、template class __declspec(dllexport) CHoge;と、実装をエクスポート指定することができる。
しかし、これって実装はDLL側にあるから、利用側はdllimport指定することで、おそらくコンパイルしない。
結果モジュール間での関数呼び出しになるから呼び出しのコストがあるよなって思って、テストしたんですが案の定でした。


※ベクトルのNormalizeを1テストあたり1000万回行い、それを20回行った際の最小、平均、最大

場合によっては警告出てても、「DLLビルドとEXEビルドに同じの使ってるからいいねん!」ってやるしかないよな。
そう思った。

汚えテストコードはこちら。
github.com