我在热点代码中有一个虚函数,因此需要返回一个结构。我有两个选择:

virtual Vec4 generateVec() const = 0; // return value

virtual void generateVec(Vec4& output) const = 0; // output parameter

我的问题是,这些功能的性能通常有什么区别吗?我认为第二个更快,因为它不涉及在堆栈上复制数据。但是,第一个通常更方便使用。如果第一个仍然稍微慢一点,这是否可以测量?我也迷恋吗:)

让我强调一下,此函数每秒将被调用数百万次,而且结构Vec4的大小很小-16个字节。

最佳答案

如前所述,尝试一下-但是您很可能会发现Vec4 generateVec()实际上更快。 Return value optimization将为elide the copy operation,而void generateVec(Vec4& output)可能会导致output参数的不必要的初始化。

有什么方法可以避免将函数虚拟化?如果您每秒调用数百万次,则值得研究一下额外的间接级别。

10-07 13:35