从功能和性能中返回值

时间:2012-07-07 21:02:49

标签: c gcc

考虑这两个具有不同标题的C函数,但同一主体的不同之处仅在于它们返回结果的方式(通过堆栈或指针):T f1(int x)void f2(int x, T *ret)其中{{1} }。 调用sizeof(T) >= 16而不是调用f1或者像f2这样的编译器优化两次调用类似结果时是否存在任何性能损失。

1 个答案:

答案 0 :(得分:0)

我所看到的会有性能下降。对于f1,函数必须创建一个T类型的对象,然后它返回一个副本,因为你没有指定它应该从引用或指针返回(但是那时函数必须分配内存)对于它)。

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

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