プログラミング

C++速度実験その3!メンバ変数とthisポインタ

thisポインタ使用例

はじめに

更新に空きができてしまいましたが,C++速度実験その3です!

ちなみに前回は,C++速度実験その2!vector配列の扱いについて

 

今回のテーマはズバリthisポインタです.

thisポインタはクラスのメンバ関数内で使用できる,自身のクラスを指すポインタです.

 

thisポインタ

thisポインタは,通常メンバ関数内からメンバ変数を呼び出すときに使用しますが,もしそのメンバ関数内に参照したいメンバ変数と同じ名前がを持ったローカル変数が無ければ省略が可能です.

 

これはC言語にはなくC++から導入されたようです.

つまりこいうこと!

 

このように,正直thisポインタは特に使わなくても何とかなるのですが,明示的に分かりやすい上に,セッターなどで引数の名前を,実際に代入するメンバ変数と同じに設定できるので,コードの可読性は向上するかと思います.

 

そんなわけで,僕は基本ローカル変数で同じ名前が無くとも,thisポインタはよく使っています.

 

実験目的

さて,今回そのthisに関する速度実験をするわけですが,果たして

thisポインタを付けた場合と付けない場合で実行速度に差は出るのか.

 

という疑問から実験を行っていきます.

また,並行して関連した実験も行いますよ~.

 

実験条件

まず比較する条件を紹介します.

どの実験でも共通しているのが,以下の

という test クラスに属する double 型のメンバ変数10個に100,000,000回アクセスします.

それを100試行行い,かかった時間の平均値を比較する形をとります.

 

実験0 (baseline):thisポインタを使わない

実験1:thisポインタを使う

実験2:予めローカルにthisポインタを確保しておく

実験3:ローカル変数にメンバ変数をthisを使って確保しておく

実験4:ハイブリッド

 

以上5つの条件で比較していきます.

実行環境

IDE CLion 2018.3.3 © Jetbrains
CPU Intel(R) Core(TM) i7-5500U CPU
@2.40GHz(4 CPUs)
メモリ 8GB

 

実験結果

実験0 0.45108 s
実験1 0.46661 s
実験2 0.43032 s
実験3 0.32787 s
実験4 0.35778 s

なんと,実験3が一番速かった.

とにかく分かったことは,

  1. thisポインタの有無は実行速度に影響がほとんど出ない.
  2. thisポインタをローカルに確保しても実行速度に影響がほとんど出ない.
    (むしろひと手間増えて遅くなる??)
  3. メンバ変数へのアクセスは時間がかかるので,何度も参照する場合はローカルにコピーしておくのが吉.

以上.


スポンサードリンク