- ベストアンサー
手続きのインライン展開 基準
ki073の回答
C++のインライン展開については分かりませんが、Cの場合で、かつ私が使っているPGIのコンパイラの場合について書きます。 Intelコンパイラも多分同じようなことをやっています。gccは最適化のメッセージをあまり出さないので分かりませんが、近いことをやっているはずです。 1) インライン展開は埋め込まれる場所にコードを書いたのとほぼ同じになります。CALLが減るだけで普通は誤差内です。 このあたりも参考に http://d.hatena.ne.jp/wocota/20090219/1235058524 インライン展開の一番効果があるのは、インライン展開によりベクトル化(インテルCPUの場合はSSEを使う)ができる場合です。 関数呼び出しをそのままコンパイルするとベクトル化が原理的にできませんが、インライン展開することによりベクトル化が可能な場合があります。その時には効果を発揮します。 ベクトル化が行われるところは、普通は一番内側のループでそこから関数呼び出しが行われているときにインラインの効果のある場合があります。 CPUのベクトル化は結構条件が厳しく、複雑な演算ではできないことが多いので単純な関数でないと難しいのが現状です。 (GPUの方が条件は緩い) このあたりのことは書くとキリが無いので、聞きたいことがあれば書き込んでください。
関連するQ&A
- インライン展開でコンパイラが何をやっているのか知りたいです
インライン展開すると、関数の呼び出しオーバーヘッドが小さくなることはわかるのですが、インライン展開した場合としていない場合と、なぜ関数呼び出しのオーバーヘッドがなくなるのかアセンブルレベルでの違いがよくわからないです。 関数をインライン展開した場合、コンパイラはどのようにコンパイルするのか、そしてその関数実行時の振る舞いがインライン展開なしの場合とどう違うのか、わからないので教えていただけませんか? 以上、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 再帰関数のインライン展開
再帰関数のインライン展開は出来るのでしょうか? もし、出来るようならアセンブラではどのように表現されているんですか? C以外の言語でも、再帰関数のインライン展開が出来るプログラム言語があれば教えてください。
- ベストアンサー
- C・C++・C#
- インライン関数
インライン関数として認識されなくても、通常の関数として実行されるのなら、プログラムする際にはすべての関数にinlineと書けばいいと思います。 インライン関数を使えば実行速度が上がる。それなら何故コンパイラ側で通常の関数すべてをインライン関数として認識しないのかがわかりません。inlineと書く手間が省けるので。 lnline関数として認識しようとしたができず、通常の関数として実行する時は、通常の関数を普通に実行するときよりも実行速度が遅くなるのでしょうか?もし、遅くならないのならすべての関数をinline関数として書けばいいと思います。どうなんでしょうか?お願いします。
- 締切済み
- C・C++・C#
- GNUコンパイラとIntelコンパイラの違いについて
今回fortranとC言語で書かれたWindows用プログラムをLinux用に移植することになりました。GNUのコンパイラを使用し無事コンパイルできたので実行したのですが"Segmentation fault"となりうまく実行できませんでした。そこで試しにIntelのコンパイラを使用しコンパイルしてみたところGNUのときとは違い"Segmentation fault"とは出ず、プログラム内のエラーチェックに引っかかり止ってしまいました。同じソースコードにもかかわらず止まる箇所が異なります。 今まで考えたことがなかったのですがGNUとIntelのコンパイラの違いはなんなのでしょうか?また、この二つ以外にいいコンパイラはあるのでしょうか?
- ベストアンサー
- C・C++・C#
- コンパイルの実行の仕方
初めてプログラミング言語を授業でとったのですが、 コンパイルの【実行】の仕方がわかりません。 まず、コマンドプロンプトを開くまではわかったのですが、 学校での説明に 「javaのコンパイラはjavacであるので、以下のように指定する。 javac <ソースファイル名> 」 と書いてありました。 コンパイラというのは上記の場合、コマンドプロンプトに 「C:\>javac *****.java」を入力すればコンパイルしたということになるのでしょうか? 「指定する」とかいてあっても指定の仕方すらわからないのです。 コンパイルを検索してもなかなかコンパイルをする意味がよくわからないので、よろしければ教えてください。
- 締切済み
- Java
- C言語での質問です
C言語を始めて、2ヶ月くらいです。コンパイラは、Borlandc++で、エディタは、bcpadに付いていたものを使っています。 「サンプル通り作成したプログラムがコンパイルエラーになり」 一つ一つ確認しても、間違っている箇所が見つかりません。一人で解決できないとき、皆さんはどのようにして解決していますか。
- ベストアンサー
- Windows XP
- CとJavaはどのくらいスピードが違うの?
BorlandのJBuilderなど、Javaもネイティブコードコンパイラがありますよね。質問ですが、 (1) UNIXで動くJavaのネイティブコードコンパイラで優秀なものはあるのでしょうか。 (2) C言語でコンパイルしたプログラムとJavaでネイティブコードコンパイルしたプログラムは、どのくらい速度に差があるのでしょうか? たとえば、Visual Basicも最近のバージョンはネイティブコードコンパイルができますが、C言語で作った同じ論理構造のプログラムに比べて、やはり、かなり実行速度が劣ります。
- 締切済み
- Java
- FedraCore4でのC言語
簡単なCのプログラムをテストしようとしたのですが、コンパイラが見つかりません。 パッケージを全部インストールしていない状況でC言語のプログラムををコンパイルするにはどうすればよいのでしょうか?
- 締切済み
- Linux系OS
お礼
回答ありがとうございます。 自分が知りたいことは十分知ることができました。 インライン展開の効果が一番現れるのはどんなときか、という点まで教えていただき勉強になりました。