自作関数をインライン関数に設定してみよう その3

#include <iostream>


using namespace std;

//👇自作関数がインライン関数に設定されています

inline void function(int a, int b) {

cout << a + b << "\n";

return;

//自作関数をinline関数に設定しました

}


int main() {


int c = 3;

cout << c << "\n";


function(1, 2);


int d = 4;

cout << d << "\n";


function(1, 2);


int e = 5;

cout << e << "\n";


function(1, 2);


int f = 6;

cout << f << "\n";


function(1, 2);


int g = 7;

cout << g << "\n";


function(1, 2);


return 0;


ビルド実行結果


3

3

4

3

5

3

6

3

7

3



ソーラー「このプログラムの実行結果は


自作関数をinline関数に設定しない場合と


まったく同じです。


ですが


違いがあるん~だよ~」


マックス「自作関数の定義の先頭に

👇

inline void function(int a, int b) {

cout << a + b << "\n";

return;

//自作関数をinline関数に設定しました

}


inlineがくっついているだけのような気がするが・・・」


てんC「それ以外には


普通のプログラムと変わりがないようにみえますね。」



ソーラー「自作関数の定義に

👇

inline void function(int a, int b) {

cout << a + b << "\n";

return;

//自作関数をinline関数に設定しました

}


inlineがくっついた


このプログラムはどのようにビルド実行されるかというと・・・


まずは自作関数の定義にinlineがついてない場合のプログラムから


みていきましょう。

👇


#include <iostream>


using namespace std;


void function(int a, int b) {

cout << a + b << "\n";

return;

//自作関数の定義にinlineがついてない場合です

}


int main() {


int c = 3;

cout << c << "\n";


function(1, 2);


int d = 4;

cout << d << "\n";


function(1, 2);


int e = 5;

cout << e << "\n";


function(1, 2);


int f = 6;

cout << f << "\n";


function(1, 2);


int g = 7;

cout << g << "\n";


function(1, 2);


return 0;


ビルド実行結果


3

3

4

3

5

3

6

3

7

3


ソーラー「


まずこのプログラムは


機械語に翻訳されてコンピュータのメモリに格納されます。


自作関数の定義にinlineがついていない場合は



自作関数の定義の部分

__________________________________

void function(int a, int b) {

cout << a + b << "\n";

return;

//自作関数の定義にinlineがついてない場合ですね

}

__________________________________


main関数の部分

__________________________________

int main() {


int c = 3;

cout << c << "\n";


function(1, 2);


int d = 4;

cout << d << "\n";


function(1, 2);


int e = 5;

cout << e << "\n";


function(1, 2);


int f = 6;

cout << f << "\n";


function(1, 2);


int g = 7;

cout << g << "\n";


function(1, 2);


return 0;

__________________________________


機械語に翻訳されて別々のメモリに格納されます。


ですから


機械語に翻訳された自作関数の命令文


function(1, 2);


が実行されるたびに


コンピュータは


機械語に翻訳されたメモリに格納されている自作関数の定義を


読み込むこみにいくことになります。


このプログラムでは


function(1, 2);



5回実行されているので


5回


機械語に翻訳されたメモリに格納されている自作関数の定義を読み込むこみにいくことになります。」


マックス「5回も読み込みに行くのか」


ソーラー「そうなんです


ところが


自作関数の定義にinlineがついている場合は・・」


マックス「ついているのか・・・にゃ~」


てんC「マックスさん おにゃんこがとりついています。」


マックス「にゃ!🐈 にゃ、にゃ!」



ソーラー「その意味での とりついているではありません。


自作関数の定義にinlineがついている場合のプログラムを


みてみましょう。」


#include <iostream>


using namespace std;


inline void function(int a, int b) {

cout << a + b << "\n";

return;

//自作関数の定義にinlineがついている場合です

}


int main() {


int c = 3;

cout << c << "\n";


function(1, 2);


int d = 4;

cout << d << "\n";


function(1, 2);


int e = 5;

cout << e << "\n";


function(1, 2);


int f = 6;

cout << f << "\n";


function(1, 2);


int g = 7;

cout << g << "\n";


function(1, 2);


return 0;


ビルド実行結果


3

3

4

3

5

3

6

3

7

3


ソーラー「このプログラムがビルド実行されると


自作関数の定義の部分

__________________________________

inline void function(int a, int b) {

cout << a + b << "\n";

return;

//自作関数の定義にinlineがついている場合ですね

}

__________________________________


main関数の部分

__________________________________

int main() {


int c = 3;

cout << c << "\n";


function(1, 2);


int d = 4;

cout << d << "\n";


function(1, 2);


int e = 5;

cout << e << "\n";


function(1, 2);


int f = 6;

cout << f << "\n";


function(1, 2);


int g = 7;

cout << g << "\n";


function(1, 2);


return 0;

__________________________________


機械語に翻訳されてメモリに格納される際


別々のメモリに格納されることなく


自作関数の定義の部分

__________________________________

inline void function(int a, int b) {

cout << a + b << "\n";

return;

//自作関数の定義にinlineがついている場合ですね

}

__________________________________



main関数の部分の

__________________________________

int main() {


int c = 3;

cout << c << "\n";


function(1, 2);


int d = 4;

cout << d << "\n";


function(1, 2);


int e = 5;

cout << e << "\n";


function(1, 2);


int f = 6;

cout << f << "\n";


function(1, 2);


int g = 7;

cout << g << "\n";


function(1, 2);


return 0;

__________________________________


function(1, 2);


の部分にうめこまれて一緒に機械語に翻訳されてメモリに格納されます。


ですので


機械語に翻訳された

function(1, 2);


が実行されるたびに


機械語に翻訳された自作関数functionの定義を読み込みに行く必要がなくなります。


ですので


自作関数をinline関数に設定すると


より高速にプログラムを実行することができるんだよ😊」


マックス「は~っはははははは~


おお ゲームを高速で動作させるのに使えそうじゃないか。


やったな  ソーラー 」


てんC「ほんとですね ソーラーさん」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る