返回错误代码的速度比输出参数慢
本文关键字:输出 参数 速度 错误代码 返回 | 更新日期: 2023-09-27 17:50:56
这个问题涉及到Go和c#,所以比较将处理当前实现-我宁愿寻找理论证据,在最坏情况下的快速排序是…
在许多地方,我看到一个函数,返回一个元组,最后一个元素是一个错误代码。在c#中,它是带有最后一个out
参数的TryXXX
模式。
现在我想知道哪一个性能更好(再一次,从理论的角度来看——意思是如果你最多能实现它,结果会是什么)。
也许天真的想法,但与元组方法我看到内存分配问题,你必须这样做,每次函数被调用,无论什么。使用out
参数,您可以在函数外部分配内存,因此即使您调用函数数百万次,成本也为零(除了复制一些数据)。
out
应该是一个更好的表演者,对吗?或者有一些方法来实现元组传递以匹配out
?还是我完全错了?
当前Go套件(gc)实现多个返回值的方式是,返回值以与参数相同的方式传递,它们在堆栈上。此时没有内存分配(假设堆栈大小足够,这是另一回事)。考虑到c#中的out参数需要分配,我想说Go方法会更快,但不是因为方法本身,而是因为非基本数据类型在c#中是堆分配的,而在Go中程序员可以选择将其保留在堆栈上。
如果我们只考虑参数传递和多个返回值,性能影响将不存在,因为两者都表示堆栈上的push/pop。