3
如果我寫數學作業一行代碼,如:在Xcode的Objective-C中編譯時或運行時是否執行硬編碼的數學運算?
x = 109.0f*768.0f/320.0f;
是在編譯時計算或運行時的結果(261.6f)?換句話說,Xcode的優化是否認識到硬編碼數學運算的結果總是相同的,因此可以在編譯時進行預先計算?
如果我寫數學作業一行代碼,如:在Xcode的Objective-C中編譯時或運行時是否執行硬編碼的數學運算?
x = 109.0f*768.0f/320.0f;
是在編譯時計算或運行時的結果(261.6f)?換句話說,Xcode的優化是否認識到硬編碼數學運算的結果總是相同的,因此可以在編譯時進行預先計算?
它是在編譯時計算的,至少使用iOS的Xcode。此功能:
float test() {
float x = 109.0f*768.0f/320.0f;
return x;
}
編譯爲這三個操作的指令:
movw r0, #52429
movt r0, #17282
bx lr
計算在編譯時的值沒有被C標準要求。實際上,如果你設置了FENV_ACCESS
編譯指示,有些情況下在編譯時禁止計算它。打開FENV_ACCESS
不會影響此測試用例中生成的指令。
優秀的答案,謝謝。 – jonsibley 2012-02-19 01:00:51
@rob您使用的「優化級別」的值是多少?當「優化級別=無」時,優化是否仍然完成? – sch 2012-02-19 01:10:57
這是-O0(沒有優化)。 – 2012-02-19 04:02:14