嵌套会影响效率吗?

时间:2010-07-26 18:37:45

标签: javascript python performance coding-style nested

考虑Python或JavaScript等允许函数嵌套的语言:

print(vector(a * b),(a * c),(b * c)))

或像这样平:

i = (a * b)
j = (a * c)
k = (b * c)
V = vector(i,j,k)
print(V)

不同的格式对性能有多大影响?是否可以进行有效的概括,或者语言的变化是否很大?

我希望优化编译器可以为两者进行内联和输出大致相同的机器代码。那么也许这只是解释语言的一个问题?

2 个答案:

答案 0 :(得分:3)

任何函数调用都会添加少量机器指令,包括更多参数,与内联存在的相同代码相比,或者将函数编译为内联函数。

但是,这是一个非常少量的机器指令。因此,在大多数情况下,通过选择和实现更有效的算法,您可以轻松地通过任何非平凡的大小输入来实现这一点。

如果你真的在BLAZING EDGE的表现,(很可能你不是,除非你正在设备驱动程序),那么你可以开始内联函数或切换到汇编。

但无论如何,首先编写最清晰的代码,然后在开始担心性能之前进行测量。通过这样做,您可以减少错误,从而有更多时间来优化正确工作的代码。

编辑:如果您指的是匿名函数之类的东西,它们会导致性能下降,但是,一如既往地先测量,优化第二。

答案 1 :(得分:2)

在我看过的Pascal实现中,允许嵌套函数访问外部函数范围内的变量,编译器必须为每个嵌套级别维护一个额外的帧指针,并在嵌套函数访问时随时取消引用它来自外部范围的东西。唯一一次,如果嵌套函数在紧密循环中使用外部函数的变量,那么这将是一个问题。在这种情况下,额外的解除引用操作可能会削弱性能;将变量复制到循环外部的内部作用域可以避免额外的开销。