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


ソーラー「自作関数を含んだプログラムがビルドされて実行されるとき


そもそもどのようなことがおこるのか?


ちょっとここでみていこうかな。


#include <iostream>


using namespace std;


void function(int a, int b) {

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

return;

}



int main() {


function(1,2);


return 0;


}


ビルド実行結果

3


ソーラー「このプログラムが


ビルドされ実行されると


0と1のみで表される機械語プログラムに翻訳されて


メモリに格納されます。


そして


メモリに格納された機械語プログラムを


コンピュータは読み込み実行していきます。



このとき


自作関数の定義の部分

👇

void function(int a, int b) {

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

return;

}

👆


main関数の部分

👇

int main() {


function(1,2);


return 0;


}

👆


機械語に翻訳されて


別々のメモリに格納されていきます。


プログラムのmain関数が実行されていくときは


コンピュータは


メモリに格納された機械語に翻訳されたmain関数をよみこんでいきます。


そして機械語翻訳された


function(1,2);


の部分に到着します。


すると


コンピュータは


main関数の実行を中断し


自作関数functionの定義を参照するために


自作関数functionの定義の格納されているメモリの読み込みに入ります。


つまり


機械語に翻訳されたmain関数プログラムが格納されているメモリから


自作関数functionの定義が翻訳されたプログラムが格納されているメモリ


へ読み込みが移ります。


そして


function(1,2);


の実行後


再び


機械語に翻訳されたmain関数プログラムが


格納されているメモリの読み込み実行が


中断されている箇所から再開されます。


そして


最後に


機械語に翻訳された


return 0;が実行されて


プログラムの実行は終了します。


中断された箇所から再開できるよう


あるメモリには


機械語に翻訳されたfunction(1,2);


の次の命令文


機械語に翻訳されたreturn 0;


が格納されているメモリのアドレスが格納されています。


そのメモリのアドレスをたよりに


コンピュータは


機械語に翻訳されたmain関数プログラムの実行を再開しています。。


マックス「そんなことが おこなわれているのか・・・


プログラムは


上から下に


実行されているだけかとおもったぞ


器用じゃないか コンピュータちゃんは😊」


てんC「そうですね。


いろいろな知恵が


コンピュータの設計にいかされているのですね。」








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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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