-2

考虑这两个C具有不同标头但具有相同主体的函数,仅在它们返回结果的方式(通过堆栈或指针)方面有所不同:T f1(int x)以及void f2(int x, T *ret)where sizeof(T) >= 16f1调用调用f2或编译gcc -O2器将两个调用优化为相似的结果时是否有任何性能损失。

4

1 回答 1

0

从我所看到的情况来看,会有性能损失。对于 f1,该函数将必须创建一个 T 类型的对象,然后它会返回该对象的副本,因为您没有指定它应该从引用或指针返回(但随后该函数必须分配内存为了它)。

但至于 f2,您发送的是 T 类型的对象,您已经为其分配了内存。这可以节省时间,因为该函数不必创建新对象或为其分配内存。

虽然我不确定使用 gcc 2 级优化是否使用 RVO 来避免将对象复制为返回类型。

于 2012-07-07T21:11:26.313 回答