C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 126 を表示中)
■74761 / )  Re[2]: コンパイラーの最適化機能について
□投稿者/ 774RR (214回)-(2015/01/28(Wed) 10:36:16)
printf("%g\n", sqrt(2.0f)); // <math.h> <stdio.h> あり、に対して
// これがいいテストでないのは百も承知

i686-pc-cygwin-gcc-4.5.3 とか hppa2.0w-hp-hpux11.11-gcc-4.8.2 だと
最適化オプションに関係なく (-O0 と -O9 の両方で)
浮動小数点数リテラルを引数に取る sqrt() はコンパイル時評価され
生成される機械語上では sqrt(2.0f) が double 浮動小数点数定数値に展開された。
gcc -S -O9 sqrtest.c とか

VC++2005 では
-Od で最適化を禁ずると浮動小数点数引数をスタックに積む形式のライブラリ関数 _sqrt を呼び出す
-Ox で最適化をかけると浮動小数点数引数を FP に積む形式のライブラリ関数 __CIsqrt を呼び出す
つまりコンパイル時に定数展開する処理はしていない。
cl -Ox -FAsc sqrtest.c とか

某社の某組み込みマイコン向けCコンパイラは定数展開しなかった(詳細略)

Console.WriteLine(Math.Sqrt(2.0)); // に対して
VC#2005 では csc /o+ および csc /o- の両方でコンパイル時展開を行わない。
(ildasm で確認) csc -o+ sqrtest.cs とか。

ってことで VS2010 でどうなっているかは自分で確認してみるといい。
返信 編集キー/


管理者用

- Child Tree -