返回值或使用指针参数更快

时间:2014-02-10 14:10:41

标签: c++ c

我想知道通常从函数返回值或使用指针作为参数并将值传递给该指针是否更快。

5 个答案:

答案 0 :(得分:4)

在不同的常见ABI中, large (不适合寄存器)对象的返回值通过指针实现。调用者保留空间,并将指针传递给被调用者,该指针使用该指针来创建对象。

答案 1 :(得分:1)

我会假设我们在这里谈论C++11,因为已经有2年了。

首先按值返回对象:移动语义,(N)RVO可以启动并生成非常快速的代码,非常容易阅读。但是,如果您对代码进行概要分析并发现此特定函数是瓶颈,请考虑将引用用作“out-parameter”。实际上这可能比使用指针更快,因为编译器在如何表示引用方面具有更大的灵活性。 C ++的ISO标准没有规定引用需要存储,因此编译器可以自由地使用有效零字节开销来使引用成为另一个内存位置的文字别名。

总而言之,首先编写最干净的代码,然后测量它。如果您只是按值返回(可移动)对象,人们会低估编译器可以为您做多少优化。

答案 2 :(得分:1)

现代编译器和C ++ 11在很多情况下按值返回最快:Want Speed? Pass by Value.Archive

答案 3 :(得分:0)

指针的长度为4或8个字节,具体取决于架构。

如果您的值小于该值,则传递值可能会更快。

如果您有大型对象和复制构造函数,那么将复制更多内存并传递这种参数会更加昂贵。

但是......编译器优化,内存对齐和其他法术可能需要你在你的情况下直接调查这个。

答案 4 :(得分:0)

return by value的情况下,假设调用者有一个传递编译器的对象将创建该参数的副本,该副本或多或少等于pass by reference的成本。因此从性能的角度来看,任何解决方案似乎都是等