LoginSignup
2
1

More than 5 years have passed since last update.

少なくともVSでは関数定義を無理してヘッダーに書かないようにする必要はなさそうだ

Posted at

初めに

関数定義をcpp/ccファイルに書くか、h/hppに書くかたまに悩むことがあると思うんですが、コンパイル速度的にはどうなんよ、ということで検証しました。

調査対象

定義をヘッダーに書いていたもの
https://github.com/YSRKEN/KanColleSimulator_KAI/commit/7a37a02343c224018c3962aa04addad0c77894c4

定義をcppファイルに移したもの
https://github.com/YSRKEN/KanColleSimulator_KAI/commit/a14223991c37a1eb64c4df4d97fedd47db3c1ac5

使うコンパイラ

  • Visual Studio 2015 community Update 1
  • Visual Studio 2015 community Update 1 Clang with Microsoft CodeGen (January 2016) (clang3.7)

この2つのコンパイラ ✕ x86/x64 ✕ Debug(-O0)/Release(-O2)
の計8通りの構成を作り、VSのバッチビルド機能ですべてリビルドした時間を測定

測定環境

計測方法

アマレコTVを用いてコンパイル時のlogウィンドウを録画する。録画コーデックはUtVideo Codec Suite 15.3.0 YUV420 BT.709 VCM

これをAviUtlにて取り込みカット編集、AviUtlに表示される総時間と総frame数を記録する。なおAviUtlの読み込みプラグインにはL-SMASH Works File Reader r785を利用した

結果

ヘッダーに定義を書いたもの 3:58.59[7158frame]
def_at_header
cppに定義を書いたもの 3.57.80[7134frame]
declear_only

有意な差は出なかった(ヘッダーに書くと+0.3%コンパイル時間増加した)

結論

コンパイラは十分優秀なのでどっちでもいいんじゃないか。
templateが絡む関数を公開するととどうせヘッダーに書くしか無いのだから、ヘッダーに定義を書くことへの罪悪感をもし持っている人がいたら少しは減ったかな?

他のコンパイラでも(gccとかgccとかgccとか)多分同じなんじゃなかろうか。

2
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1