返回错误代码是否比 out 参数慢?

这个问题涉及 Go 和 C#,因此比较将处理当前的实现——我宁愿寻找理论证据,比如在最坏情况下的快速排序性能是......

在许多专用于 Go 的地方,我看到一个函数返回一个元组,最后一个元素是一个错误代码。在 C# 中,它是TryXXX带有最后一个out参数的模式。

现在我想知道哪一个表现更好(再一次,从理论的角度来看——这意味着如果你最多能实现它,结果会是什么)。

也许是幼稚的想法,但是使用元组方法我看到内存分配问题,每次调用函数时都必须这样做,无论如何。使用out参数,您可以在函数外部分配内存,因此即使您调用函数数百万次,成本也为零(好吧,除了复制一些数据)。

out那么应该是一个更好的表演者,对吗?或者有什么方法可以实现元组传递以匹配out?还是我完全错了?


慕莱坞森
浏览 135回答 1
1回答

呼唤远方

当前 Go 套件 (gc) 实现多个返回值的方式,返回值的传递方式与参数的传递方式相同,它们在堆栈上。那时没有内存分配(假设堆栈大小足够,这是另一回事)。考虑到需要分配 C# 中的 out 参数,我会说 Go 方法会更快,但不是因为方法本身,而是因为非原始数据类型在 C# 中是堆分配的,而在 Go 中是程序员可以选择将其保留在堆栈上。如果我们简单地考虑参数传递与多个返回值,性能影响将不存在,因为两者都代表堆栈上的压入/弹出。
打开App,查看更多内容
随时随地看视频慕课网APP