Visual studio 2013 C++のコンパイラー最適化能力について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
鈴木

Visual studio 2013 C++のコンパイラー最適化能力について

#1

投稿記事 by 鈴木 » 9年前

お世話になります。

コンパイラー最適化によって、下記のようなコードがどうのように置き換えられるのでしょうか。
double a = offset1 + d[w*x*y*z]; // w,x,y,z皆整数とする。
double b = offset2 + d[w*x*y*z];
double c = offset3 + d[w*x*y*z];

置き換えられた後のコード(等価的)
case1:
int i = w*x*y*z;
double a = offset1 + d;
double b = offset2 + d;
double c = offset3 + d;

case2:
double x = d[w*x*y*z];
double a = offset1 + x;
double b = offset2 + x;
double c = offset3 + x;

宜しくお願い致します。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: Visual studio 2013 C++のコンパイラー最適化能力について

#2

投稿記事 by h2so5 » 9年前

そもそもコンパイラの最適化というのはCのコードレベルでの書き換えを行うわけではないので、どのように置き換えられるかというのはC言語では答えようがありません。
それに、offsetやw,x,y,zが定数なのか変数なのか、a, b, c が代入後にどのように利用されるのかといったコンテキストによって最適化の結果が変わりますから、局所的なコードだけでは結果は分かりません。

鈴木

Re: Visual studio 2013 C++のコンパイラー最適化能力について

#3

投稿記事 by 鈴木 » 9年前

早速お返答有難うございます。
情報不足大変失礼致しました。
w,x,y,xは皆変数です。

case1, case2はコンパイルされたコードの等価的なものを示しております。
要は実行効率を図るためにコンパイラーより修正してくれた算法をC言語風で表わしています。
勿論コンパイル結果として機械コードであることは知っています。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: Visual studio 2013 C++のコンパイラー最適化能力について

#4

投稿記事 by h2so5 » 9年前

詳しく知りたいのであれば、実際にアセンブリコードを出力して確認してみてはいかがでしょうか。
読み方が分からない場合、こちらにコードを投稿していただければ解説します。

http://d.hatena.ne.jp/kawatan/20070911

鈴木

Re: Visual studio 2013 C++のコンパイラー最適化能力について

#5

投稿記事 by 鈴木 » 9年前

お世話になっております。
マシン語本は当に分かりませんが、でもチャレンジしてみたいです。
それ以前に、恥ずかしいながら、
コード実行能率化ためのコンパイルスイッチを教えていただきませんか。
恐らくそのようなスイッチを入れなければ、
前文で示したようなコードの最適化をやってくれないでしょう。
それとも要らないでしょうか。

環境
MS Visual Studio 2013 C++

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: Visual studio 2013 C++のコンパイラー最適化能力について

#6

投稿記事 by h2so5 » 9年前

Releaseモードなら最適化はされますが、個別に設定したいのであれば以下のページが参考になるでしょう。
http://myoga.web.fc2.com/prog/cpp/opti01.htm

閉鎖

“C言語何でも質問掲示板” へ戻る