No.1ベストアンサー
- 回答日時:
簡単に言うと
1.引数のコピー処理
2.CALL命令
3.戻り値のセット処理
4.RET命令
の分が多くなります。
変な例えですが、冷蔵庫を家の外に置いておくと、上着を着て履物を履いて出て行き、戻ると履物を脱いで、上着を脱ぐといったようなものです。
上の1の引数のコピー処理はCall by value(値渡し)の場合におこります。
No.2
- 回答日時:
単純な例でいいますと、こうなります。
for(i=0;i<10;i++) { func(); }
は
funcの中身;funcの中身;funcの中身;funcの中身;funcの中身;funcの中身;funcの中身;funcの中身;funcの中身;funcの中身;
のようになります。
上記の例ですと、i変数を使ってループしていますが、i変数を加算したり評価したりする部分、
そして、関数のcall、引数のセット等、ret がなくなり、その分だけ速度が向上します。
しかし、funcの中身が大きかったりループ数が多ければ
命令がL1キャッシュに入りきらず、かえって速度が低下することがあるので
コンパイラはそのあたりも自動的に判断します。
No.3
- 回答日時:
引数や返却値のコピーとサブルーチンの往復に関しては既に別の方が回答されていますが、それ以外にも違いが現れます。
インライン関数を呼び出す部分をコンパイルする際、コンパイラは呼び出そうとする関数の中身のことまで全て分かることになります。これによって関数の枠組みを超えた最適化が可能になります。
関数の枠組みを超えた最適化は、引数に定数式を渡した場合等に最も顕著になり、場合によっては関数の呼び出しが単なる定数として展開される可能性もあります。
他に、例外処理に関しても大きな影響が現れます。例外指定によって明示的に例外が発生しないことを宣言しない限り、通常の関数であればあらゆる例外が発生するものとして、それに対応するために処理を展開する必要がありますが、インライン関数であれば、関数の中身が分かっていますから、可能であれば例外が発生しないものとして扱うことが可能になります。これによって(多くの場合)速度もサイズも大幅な改善が可能になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
C++でアボート(Abort)で処理が...
-
初心者はIDE使わないほうが良く...
-
変数(関数)名の頭に_
-
コンパイルできない
-
C++ で、「)」が必要 というエ...
-
C言語での変数宣言の場所
-
Delphiの逆コンパイル
-
どのプログラミング言語ででき...
-
fortranでのNaNについて
-
fortrn77のフリーソフト
-
C言語
-
整数演算と実数演算の速度が違...
-
CPUが16bitでも32bitOSでコンパ...
-
conio.h? curses.h?
-
MacでFortranプログラミングを...
-
makeのエラーについて
-
graph.hがincludeできない
-
PICマイコンによる乱数の表示に...
-
io.hをincludeするとそのような...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0除算して、落ちるプログラムと...
-
io.hをincludeするとそのような...
-
C++ で、「)」が必要 というエ...
-
C++でアボート(Abort)で処理が...
-
Visual C++とVisual C++.NETの違い
-
変数(関数)名の頭に_
-
fortranでのNaNについて
-
コンパイルできない
-
C++の Unhandled Exceptionにつ...
-
コンパイラの制限 : ヒープの領...
-
PICマイコンによる乱数の表示に...
-
CPUが16bitでも32bitOSでコンパ...
-
関数の戻り値による変数の初期化
-
Delphiの逆コンパイル
-
どのプログラミング言語ででき...
-
コンパイラフラグ(compiler fla...
-
コンパイラについて
-
FORTRAN→Cに翻訳
-
Eclipseの環境設定について
-
バイナリファイルとソースコー...
おすすめ情報