julia: 嵌套函数是否更慢?

julia: Are nested functions slower?

当我编写代码时,我可以看到一个函数中的重复部分,但在其他函数中没有使用。

所以,我想让重复部分发挥作用。

但是嵌套函数会比较慢吗?我在 julia 文档的性能提示中找不到这个。

Bogumil 在评论中大致回答了这个问题。只是为了了解内联的工作原理,您可以做这个小实验。定义以下 fg 函数。

f(x) = x*x

function g(a,b)
  a+f(b)
end

现在让我们看看编译器对它们做了什么:

julia> @code_typed g(3,4)
CodeInfo(
1 ─ %1 = Base.mul_int(b, b)::Int64
│   %2 = Base.add_int(a, %1)::Int64
└──      return %2
) => Int64

可以看到函数f的调用已经被内联了。

一般小的函数会内联,大的可以用@inline宏修饰,提示编译器内联(注意这只是提示)。由于当一个函数的代码多于几行时调用它的成本很小,因此调用它不会显着影响性能。

最后但同样重要的是,用 BenchmarkTools 做自己的基准测试似乎总是一个好主意:-)