自作関数をインライン関数に設定してみよう その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「ほんとですね ソーラーさん」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます