【发布时间】:2020-11-08 15:47:22
【问题描述】:
这两种情况的性能会有多大差异?
int func(int a, int b) { return a + b; }
和
void func(int a, int b, int * c) { *c = a + b; }
现在,如果它是一个结构呢?
typedef struct { int a; int b; char c; } my;
my func(int a, int b, char c) { my x; x.a = a; x.b = b; x.c = c; return x; }
和
void func(int a, int b, int c, my * x) { x->a = a; x->b = b; x->c = c; }
我能想到的一件事是寄存器不能用于此目的,对吗?除此之外,我不知道这个函数在通过编译器后会变成什么样子。
哪个更高效、更快捷?
【问题讨论】:
-
在所有情况下检查生成的汇编程序(打开编译器优化),并分析性能。
-
最后两个案例与第一个案例的相关性在哪里。最后两个案例甚至都不太相似
-
我没有足够的知识来确定生成的汇编代码有多好(即可能是一些具有更大延迟的指令),我也没有足够的知识来正确地对它们进行基准测试,所以我正在寻找答案那些在自己之前对此提出质疑并能够得出编译器行为方式的结论的人。
-
@Chase 它与我的标题相关,比较返回数据与使用指针。
标签: c++ c optimization micro-optimization