2012-02-19 4 views
3

私は数学の操作のためのコードの行を記述する場合、:ハードコーディングされた演算は、XcodeのObjective-Cでコンパイル時または実行時に実行されますか?など

x = 109.0f*768.0f/320.0f; 

は結果(261.6f)コンパイル時に計算や時間を実行しますか?言い換えれば、Xcodeの最適化は、ハードコーディングされた数学演算の結果が常に同じであることを認識するため、コンパイル中にあらかじめ計算することができますか?

答えて

4

コンパイル時に、少なくともiOSをターゲットとするXcodeを使用して計算されます。この関数:

float test() { 
    float x = 109.0f*768.0f/320.0f; 
    return x; 
} 

は、これらの3つの命令にコンパイル:

movw r0, #52429 
movt r0, #17282 
bx lr 

コンパイル時に値を計算するにはC標準で必要とされていません。実際に、FENV_ACCESSプラグマを設定した場合、コンパイル時に計算が禁止されることがあります。 FENV_ACCESSをオンにしても、このテストケースで生成される命令には影響しませんでした。

+0

優秀な回答、ありがとうございます。 – jonsibley

+0

@robあなたが使った「最適化レベル」の値は何ですか? 「最適化レベル=なし」のときでも最適化は行われますか? – sch

+0

-O0(最適化なし)でした。 –

関連する問題