考虑这两个 C
函数,它们具有不同的 header ,但主体相同,仅在返回结果的方式上有所不同(通过堆栈或指针):T f1(int x)
和 void f2(int x, T *ret) ,其中 sizeof(T) >= 16 。
与调用 f2
相比,调用 f1
时是否会产生性能损失,或者像 gcc -O2
这样的编译器会将这两个调用优化为相似的结果。
最佳答案
据我所知,性能会受到影响。对于 f1,该函数必须创建一个 T 类型的对象,然后它返回该对象的副本,因为您没有指定它应该从引用或指针返回(但随后该函数必须分配内存对于它)。
但对于 f2,您正在发送一个已为其分配内存的 T 类型对象。这节省了时间,因为该函数不必创建新对象或为其分配内存。
虽然我不确定使用 gcc 2 级优化是否使用 RVO 来避免将对象复制为返回类型。
关于c - 功能和性能的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11378606/