从历史上看,在类似C ++ 的语言中,与同一种语言中的 其他形式的流控制相比,异常的速度非常慢。
在C ++中,有两件事在起作用:
- 引发异常非常复杂。堆栈需要被展开,并在本机代码这样做是 多 比在基于虚拟机的高级语言更难。
- 常规的直接流量控制非常快。它是本机代码;分支是一对指令,其中回滚堆栈的异常会调用复杂的算法(在可能压缩的大表中查找堆栈数据,依此类推)。
这种性能上的差异导致了例外背后的普遍智慧:仅在不寻常的事情上这样做,因此仅在最有益的地方使用它,而不会损害性能。
这不适用于高级语言。这也有两个原因:
- 回滚堆栈要简单得多。堆栈很容易检查。您不需要魔术表即可知道在任何给定时间回滚堆栈的距离以及构造了哪些对象。
- 常规程序流程本质上较慢。在基于VM的语言中,一切都从一开始就需要更多的工作。
例外仍然不是免费的,但这种差异不再是一件值得担心的事情。这意味着在C ++中形成的一般智慧在这里被错误地应用了。正常程序流程中经常使用异常。
实际上,它们内置于语言中,是您一直使用的结构。每次使用迭代器– Every时,都会使用
for x inxrange(1000)一个
StopIteration异常来结束循环。
选择Python中的例外或线性流控制,这更有意义。不要基于性能进行选择,除非您实际上处于性能很重要的内部循环中。在这种情况下,像往常一样,剖析并找出是否确实重要。
(我不能说PHP。)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)