首页 > 解决方案 > 返回函数是否​​比非返回函数具有更多的性能开销?

问题描述

我处于从函数返回值是可选的情况。所以无论我返回还是不返回在逻辑上都没有区别,但我可以安全地假设同样的事情吗?

我的意思是当我们使用一个返回一些值(例如:)的函数而不是返回的函数时,是否有任何性能开销(时间或内存)Intvoid

这是一个虚拟项目,出于我的好奇心,这个问题很明显。

标签: cperformanceprocessing-efficiencymemory-efficient

解决方案


这取决于使用的 ABI 以及被调用的函数是否是内联的。

在具有System V 应用程序二进制接口 AMD64(Linux、FreeBSD、macOS、Solaris 和 Linux 的 Windows 子系统)的x86_64 平台上,sizeof在寄存器中返回最多 16 个字节的返回值。返回最多 16 个字节涉及将返回值加载到一个或两个 8 字节寄存器中。返回较大的值涉及通过传递给被调用者的隐藏返回值指针存储到调用者的堆栈中,该指针也必须rax在返回时加载到寄存器中。

有关调用约定的详细处理,请参阅Agner Fog的调用约定,特别是 §7.1 传递和返回对象。在寄存器中传递 SIMD 类型有单独的调用约定。


推荐阅读