h-otterの備忘録

インフラを中心にコンピュータ関連をいいかんじにやっていきます

inline関数などの評価

C++を最近勉強しているのですが、inline関数って本当に早いのか実験してみました。

環境

  • ubuntu 14.04.3 LTS
  • g++
  • 仮想化環境
    • i7 2600k
    • 24GB

正直こういう検証には適さない環境ですが許してください。

コード

cpp_test/inline at master · h-otter/cpp_test · GitHub

検証だけしたかったのでコピペの嵐です。(言い訳)もしコードをスマートにする方法があれば教えてください。

結果

TEST; InlineFunction()
duration = 0.870657sec.
TEST; StaticFunction()
duration = 0.834252sec.
TEST; ConstFunction()
duration = 0.94697sec.
TEST; DefaultFunction()
duration = 0.829023sec.
TEST; InlineFunction(long long int)
duration = 0.981507sec.
TEST; StaticFunction(long long int)
duration = 1.00625sec.
TEST; ConstFunction(long long int)
duration = 1.01302sec.
TEST; DefaultFunction(long long int)
duration = 1.00517sec.

f:id:h-otter:20150908224509p:plain f:id:h-otter:20150908224511p:plain

考察

  • 引数がなければinlineはむしろ遅い
  • 引数が多ければ多いほどinlineのほうが早い(理論的には納得)
  • 実はconstが一番遅い
  • staticと普通の関数に大きな変化はない

検証しているものが少ないですが、大体こんな感じにまとめられると思います。しかし、inlineを使うのは速度じゃなくてメモリのオーバーヘッドを減らすことが主な目的だと思うのでこの結果を鵜呑みにする必要はないですね。