jon*_*ley 3 optimization xcode objective-c clang ios
如果我为数学运算编写一行代码,例如:
x = 109.0f*768.0f/320.0f;
Run Code Online (Sandbox Code Playgroud)
结果 (261.6f) 是在编译时还是运行时计算的?换句话说,Xcode 的优化是否认识到硬编码数学运算的结果将始终相同,因此可以在编译时预先计算?
它是在编译时计算的,至少使用针对 iOS 的 Xcode。这个功能:
float test() {
float x = 109.0f*768.0f/320.0f;
return x;
}
Run Code Online (Sandbox Code Playgroud)
编译为这三个指令:
movw r0, #52429
movt r0, #17282
bx lr
Run Code Online (Sandbox Code Playgroud)
C 标准不要求在编译时计算值。事实上,如果您设置了FENV_ACCESS编译指示,则在某些情况下会禁止在编译时计算它。FENV_ACCESS在此测试用例中打开并不影响生成的指令。
| 归档时间: |
|
| 查看次数: |
337 次 |
| 最近记录: |