トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
C++
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索

___

■ インライン(Inline)


    関数の中身を呼び出し元にインラインする(埋め込む)時に利用する。
    
    C ではマクロでも代用できるが, () をつけないとバグの元になるため Inline を利用するとよい。
    
  POINT
    インライン化する目的は主に関数コールのオーバーヘッドをなくして高速化するため。
    
  POINT
    コンパイルする cpp 単位で展開するため関数の定義は見えていないといけない。
    文字通り[ inline == 埋め込む ] のでヘッダに記述しなければ参照できない。

    // test.h
    inline int add( int i );
定義部分が見える必要がある。
    // test.h
    inline int add( int i ) {
      return i + 1;
    }
    int main() {
        int i = add( 10 );
    }

    // 次のように展開される(かもしれない)
    int main() {
      int i = 10 + 1;
    }
___

■ inline化する

関数を inline するには次の条件をみたすようにする
     関数の定義部分が見えるようにする。
明示的に inline するように宣言する
    inline int add( int i ) {
      return i + 1;
    }
クラスメソッドの場合はクラスの定義部分でメソッドの定義をかくと暗黙で inline を宣言する。
    class Test {
      void int add( int i ) {
        return i + 1;
      }
    }
POINT inline の指示はコンパイラの要求であるので、実際に inline 化するのはコンパイラが決定する。
___

■ インライン化する

実行コードのサイズはインライン化する関数の大きさによって大きくなったり小さくなったりする。 関数が小さいときは inline 化することで関数呼び出しのオーバーヘッドのコードが減るため小さくなる。
    cl /c /FX  main.cpp
またコンパイラが最適化のために勝手に関数をインライン化することもある。 グローバル最適化をすると発生する。
___

■ インライン化で減るコード

     パラメータの push pop に関連するコード

PageFault がおこる可能性が減る。 ページフォルトとは 仮想メモリOS上でコードがメモリ上にない場合に発生する。
___

■ インライン化すべき条件

インライン化するには次の条件をみたすかチェックする。
     関数が十分に小さい。
     たくさん呼ばれる。
     コードの中身の変更が少ない。
          ヘッダに定義をかくので、インクルードするすべてのファイルにコンパイルが必要になる。
WARNING 開発の段階でインライン化するとヘッダファイルを変更することになるので 大規模な再コンパイルが必要になる。

NINJAIDX 12