Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
考虑这两个C具有不同标头但具有相同主体的函数,仅在它们返回结果的方式(通过堆栈或指针)方面有所不同:T f1(int x)以及void f2(int x, T *ret)where sizeof(T) >= 16。f1调用调用f2或编译gcc -O2器将两个调用优化为相似的结果时是否有任何性能损失。
C
T f1(int x)
void f2(int x, T *ret)
sizeof(T) >= 16
f1
f2
gcc -O2
从我所看到的情况来看,会有性能损失。对于 f1,该函数将必须创建一个 T 类型的对象,然后它会返回该对象的副本,因为您没有指定它应该从引用或指针返回(但随后该函数必须分配内存为了它)。
但至于 f2,您发送的是 T 类型的对象,您已经为其分配了内存。这可以节省时间,因为该函数不必创建新对象或为其分配内存。
虽然我不确定使用 gcc 2 级优化是否使用 RVO 来避免将对象复制为返回类型。