我意识到这不是一个大问题,但我很好奇。我有一个函数func radian(degree: CGFloat)->CGFloat
,建议将输入乘以必要的值,将度数转换为弧度。
我的代码中包含了对具有常量值的函数的引用。在给定的主循环中,此函数将使用常量参数(如radian(360)
)调用至少几千次。
我意识到在现代处理器上进行几千次乘法不是问题,但我仍然想了解Swift编译器的工作原理。
我正在讨论是否返回并将此函数的结果作为硬编码值而不是对函数的调用。我的直觉是编译器会自动为我做这个,但我想确保这是真的。
编译器是否将radian(360)
编译为6.283184
答案 0 :(得分:2)
编译器很可能内联调用,一旦调用内联,它也可能执行常量折叠以便在编译时进行计算。
是的,启用优化后,radian(360)
很可能会被编译为6.283184
。但验证这一点的唯一方法是实际查看优化构建的结果程序集。
如果你想更有可能这样做,你可以在你的函数上粘贴未记录的@inline(__always)
属性。这将迫使它始终内联函数。但这可能是不必要的。