関数呼び出しのオーバーヘッドを削減する、インライン展開をします。実際に行われたのか、どう行われているかは出力されません。そのため、コンパイルたコードがどうなってるかを調べ、インライン展開がどう展開しているのかを調べました。アセンブラに関してはほとんど説明しません。シンボル名(文字列)」で関数呼び出しを実行する事だけ理解していれば大丈夫です。getNumInH();}内容としては、getNumInCpp()cpp内に関数の中身が書かれているcpp内のものはインライン展開されないはずgetNumInH()ヘッダファイル内に関数の中身が置かれているインライン展開されるgetNumInline()インライン不可能なprivateメソッドと、cpp内の関数を呼ぶgetNumCallCpp()明示的にインライン展開指定をしたものインライン展開されるになります。最適化しない場合まずは最適化オプションをつけずにコンパイルしました。func.cppそのため、インライン展開はされません。%alcallq_printfcallqで4種類の関数を全て呼び出しているのがわかります。インライン展開はされていないため、func.hやfunc.cppで直接書いている数値はどこにも出てきません。最適化した場合O3オプションをつけてインライン展開されるようにしました。printfの呼び出しcallq_printf最適化した場合、関数呼び出しの量も内容もかなり変化しています。最適化しない場合と同じく関数呼び出しをしています。次にprivateFunc関数の呼び出しを行っていますが、これはgetNumCallCpp関数が展開され、それ以上展開できないprivateFunc関数と、42を返すだけのgetNumInH関数がさらにインライン展開されたものと思われます。privateFunc関数はprivateメソッドですが、アセンブラではアクセス指定子は無視されます。321を返すgetNumInline関数もインライン展開されて直接数値が書かれているのがわかります。値を書いてある状態と同じになるようにインライン展開されるため、コンパイラの最適化によって処理順番を入れ替えられ、printfへの呼び出し直前に移動させられています。インライン指定しない場合のエラーコメントアウトしてあるgetNumNormal関数は、ヘッダファイル内でインライン指定をせずに定義しています。このコメントアウトを戻すと、以下のエラーにより失敗します。getNumNormal関数がfunc.sとtest.s両方に定義されていました。symbolになっています。問題なく動いているようです。ota42yC++/Ruby/RoR/golang/rust/flutter。