« AndroidのAmazonビデオアプリがアップデート | トップページ | StrinToIntのような文字列を整数に変換する関数を実装してみる »

2016-03-03

インライン化できない関数のラッパー関数などで関数呼び出しのオーバーヘッドを減らしたい



オブジェクトを返すとか、例外を投入するだけでインライン化できない関数だが、既存関数の引数が固定のラッパー関数とかで、ループの中で頻繁に呼び出されたりするような関数を用意したいことがある。

だったら、マクロ化しまうのもひとつの手かと。


大量の引数を取る関数が何度も呼ばれるような場合で、呼び出しごとに変化する引数はひとつだけだというような場合には、他の引数は固定しておく事ができる。しかしラッパー関数を作ってしまうと、ラッパー関数の呼び出しと、ラッパー関数から呼ばれる本質の関数を呼び出すという、一度の関数呼び出しで二度ずつオーバーヘッドが発生する。子のオーバーヘッドが無視できれば、関数にしておいた方がソースの可読性は向上すると思うが、オーバーヘッドが無視できないようなケースではマクロ化してしまえば、オーバーヘッドを回避することができる。


C++ではマクロよりインライン関数を使うべきという説をよく見るので、インライン化できないと通常の関数化してしまいがちだが、普通にC言語のようにマクロ化してしまった方が有効な場合もある。




style="display:inline-block;width:300px;height:250px"
data-ad-client="ca-pub-1099589974703718"
data-ad-slot="4338286575">





|

« AndroidのAmazonビデオアプリがアップデート | トップページ | StrinToIntのような文字列を整数に変換する関数を実装してみる »

C/C++」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: インライン化できない関数のラッパー関数などで関数呼び出しのオーバーヘッドを減らしたい:

« AndroidのAmazonビデオアプリがアップデート | トップページ | StrinToIntのような文字列を整数に変換する関数を実装してみる »