julia的@inline函数是做什么用的
一个给编译器的标注。提示编译器这个函数可以内联。
按照帮助的说法,一般不用手动注释。小函数编译器会自动内联。
一般只给大函数做标记。
help?> @inline
@inline
Give a hint to the compiler that this function is worth inlining.
Small functions typically do not need the @inline annotation, as the compiler does it automatically. By using
@inline on bigger functions, an extra nudge can be given to the compiler to inline it. This is shown in the
following example:
@inline function bigfunction(x)
#=
Function Definition
=#
end
非常感谢你的解答,我还有个问题不太明白,函数的内联是什么意思?什么叫内联?
一般的函数调用会消耗栈空间,内联函数则是直接把被调用者的代码内嵌入调用者
简单理解就是把需要调用的代码复制到调用处。
效果理论上和你手工复制代码,替换掉函数调用一样。
主要是为了消除小函数的调用开销。
严谨一些的解释(C++):
inline 关键词的本意是作为给优化器的指示器,以指示优先采用函数的内联替换而非进行函数调用,即并不执行将控制转移到函数体内的函数调用 CPU 指令,而是代之以执行函数体的一份副本而无需生成调用。
这会避免函数调用的开销(传递实参及返回结果),但它可能导致更大的可执行文件,因为函数体必须被复制多次。
使用上一般不用关心,让编译器去操心。
可以用 @code_native
观察生成的汇编来判断是否成功内联。
也可以看看别人都是怎么用的(虽然不一定是最佳实践
https://juliahub.com/ui/Search?q=%40inline&type=code
对应功能的测试也是非常好的参考材料(又看了一眼,v1.6.5 的测试有很多都是在测,因为标记为 @inline
而间接产生的 bug):
2 个赞
非常感谢您的解答,谢谢谢谢!