• ベストアンサー

インライン展開されているか確認する方法

VisualStudioを使用しています。 タイトルの通り、関数がインライン展開されているかどうかを確認したいのですが、何か方法はあるのでしょうか? void func(){ int a = 0; } void main(){ func(); } 例えば、上のコードで関数func()がインライン展開されてるかどうかを知りたいと思います。 どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

>例えば、上のコードで関数func()がインライン展開されてるかどうかを知りたいと思います。 基本的にプロジェクトの設定によります。 分かりやすいよう以下のようなコードでコンパイルしVisual Studio 2005 Professionalで調べてみました。 int func(int a){  return a + 2; } int main(){  int b = func(2);  return b; } release版(デフォルト設定)の場合、最適化されアセンブリコードはこのようなコードになりました。 mov eax,4 C++に書き直せば int main(){  return 4; } です。 Visual Studio 2005のrelease版(デフォルト設定:デバッグ情報入り)の場合 ブレークポイントを適当なところではり メニュー → デバッグウインドウ → 逆アセンブル で見ることが出来ます。 ※勿論確実なのは出来たバイナリを確認することです。 ちなみに最適化を無効(/Od)にすると最適化もされずインライン展開もされません。 インライン展開される為には inline int func(int a){  return a + 2; } とする必要があります。

sankaku197
質問者

お礼

詳細な説明をありがとうございます。 おかげさまで疑問は解決しました。 それにしても、この機能は便利ですね。 まさに今回のように一箇所だけ軽く調べたい時にぴったりな機能だと思いました。

その他の回答 (3)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

/Faオプションを指定するなどして、アセンブリ言語のソース(またはリスティングファイル)を出力させるのが一番確実でしょうね。

sankaku197
質問者

お礼

回答ありがとうございます。 アセンブリコードを見たい時は今まではコマンドプロンプトからclかdumpbinコマンドでファイル生成してました。 でも、こっちの方が何倍も楽で良いですね。 今度からいちいちコマンドプロンプトを開かなくて済みそうです、有益な情報ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

マップファイルでも見る?

sankaku197
質問者

お礼

回答ありがとうございます。 初めてマップファイルという物を見てみましたけど、よく分からない部分も多く少し難しいと感じました。 ここから該当箇所がinlineされているかどうかを確認していくのは、私には骨の折れる作業になりそうです。 でもこういう機能もあるんですね、別の機会で使えるかもしれません。 勉強になりました、ありがとうございます。

回答No.1

C++言語仕様の範囲でinline展開されているか否かを知るすべはありません。

sankaku197
質問者

お礼

回答ありがとうございます。 言語仕様からの視点は全く頭になかったので勉強になりました。 つまりコンパイラ任せという事でしょうか、inlineを突き詰めて考えようとするとかなり面倒な事になりそうですね。

関連するQ&A