【发布时间】:2018-07-13 21:38:47
【问题描述】:
如果在 C 中使用 void 函数与返回任意类型(例如 int)的函数相比,int 函数会比 void 函数占用更多 CPU 周期吗?
例子:
int a, b = 1, c = 2;
void f()
{
a = b + c;
}
int g()
{
a = b + c;
return a;
}
我的常识告诉我返回是一个动作,所以它应该花费一些 CPU 时间,但是我没有这里需要的适当的深入基础知识,我也不知道汇编程序可以自信地回答这个问题我自己。谷歌搜索也没有成功。
编辑: 我的兴趣纯粹是学术性的,我不希望通过使用 void 与 int 函数来获得任何显着(甚至接近)的性能。
【问题讨论】:
-
是的——通常,必须将返回值加载到目标寄存器中(尽管编译器可能会对其进行优化,以便您的代码无论如何将其加载到该寄存器中)。但是,如果您查看典型
mov指令的实际timing latency (PDF),您的担忧会消失吗?它是“1”,意思是(在最基本的解释中)对于像我的 Mac 这样的 3.04GHz 计算机,它需要 1/3,040,000,000 秒。 -
优化的汇编器输出说明了什么?如果这对您真的很重要,那就是找出答案和大量基准测试的方法。提示:可能不是。
-
@tadman 你是对的,它不是。我在这里的兴趣纯粹是学术上的,我不希望通过学习如何处理返回值来提高性能。至于汇编器,我没有生成汇编代码只是因为我不知道它(还)。
-
汇编代码是您学习最多的地方,因为编译器会告诉您它是如何解释您的代码的。弄清楚如何获得“反汇编”输出,您将获得所需的所有答案,或者至少更接近它们。
-
@usr2564301 显然太长了。
标签: c function return-value cpu-usage