カブトムシの壺

茹で蛙防止!

インライン関数って何?

 

「インライン関数」というものをつい2週間前くらいに初めて知ったので、調べた際のメモをまとめておきたいと思います。

 

(1) まずはWikipediaを読む

インライン関数Inline Function)とは、プログラミング言語の構文の一種で、コンパイラに対して特定の関数インライン展開するよう指示するものである。 つまり、コンパイラに対して、その関数を呼び出している全ての箇所に関数の実体を挿入するよう指示する。

インライン関数 - Wikipedia

 

(2) ふむふむ。インライン展開ってなんだ。お。下に書いてある。

意義[編集]

インライン展開は、関数呼び出しにかかるオーバーヘッドを無くす目的で行われる。

 

(3) オーバーヘッドってなんだ。

コンピュータが何かを行う時に無駄にかかっている負荷って認識でokかな。つまり、その無駄な負荷を減らすためにインライン関数を使う、と。

 

(4) どういう関数をインライン関数にすれば良いのかな。

Wikipediaのインライン展開の項目に書いてあった。

インライン展開 [はてなブックマークで表示]

 
 

インライン展開(Inline expansion または inlining)とは、コンパイラによる最適化手法の1つで、関数を呼び出す側に呼び出される関数のコードを展開し、関数への制御転送をしないようにする手法。これにより関数呼び出しに伴うオーバヘッドを削減する。特に小さくて頻繁に呼ばれる関数では効果的であり、呼び出し側にそのコードを展開することで定数畳み込みなどのさらなる最適化を施せる可能性が生じる。

インライン展開 - Wikipedia

 

(5) とりあえず"インライン関数は何か"が分かった!!

まとめ

1. インライン関数とは、構文の一種で、コンパイラに対して、特定の関数をインライン展開するように指示するもの。コンパイラに対して、その関数を呼び出している全ての箇所に関数の実体を挿入するようにする。

 

2. インライン展開すると何が良いかというと、関数呼び出しに伴うオーバーヘッドを減らせる。その関数が何度も何度も呼ばれるものだと効果的。

 

(*) おまけ

・kotlinだと、`fun`の前に`inline`を付けると、インライン関数になる。
・全ての箇所に関数を差し込むので、バイナリコードが大きくなる、というデメリットがある。そのため、一概にインライン関数にすれば良いというものではないとのこと。