考虑这两个具有不同标题的C
函数,但同一主体的不同之处仅在于它们返回结果的方式(通过堆栈或指针):T f1(int x)
和void f2(int x, T *ret)
其中{{1} }。
调用sizeof(T) >= 16
而不是调用f1
或者像f2
这样的编译器优化两次调用类似结果时是否存在任何性能损失。
答案 0 :(得分:0)
我所看到的会有性能下降。对于f1,函数必须创建一个T类型的对象,然后它返回一个副本,因为你没有指定它应该从引用或指针返回(但是那时函数必须分配内存)对于它)。
但是对于f2,你发送的是你已经分配了内存的T类对象。这节省了时间,因为该函数不必创建新对象或为其分配内存。
虽然我不确定使用gcc level 2优化是否使用RVO来避免将对象复制为返回类型。