c - 功能和性能的返回值

标签 c gcc

考虑这两个 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/

相关文章:

c - 让 libspotify 中的示例在 Windows 7 下工作

c - 如何对C中输出的正确名称排序列表进行排序?

c - 如何在两个 Linux 模块之间共享代码?

c - 我想以精确的精度从给定的双变量中提取小数部分。我最多只能得到 6 个精度

c++ - '从 some_type** 到 const some_type** 的无效转换'

c - 使用 Xcode 时出现类似 "Conflicting types for ' move'"的错误

gcc - 具有相同代码库和多个工具链的 ccache

如果纯函数调用 "not pure"函数,GCC 会发出警告/错误吗?

gcc - 编译 gcc - 找不到 flex 的输出;放弃

c - 尽管函数存在,GCC 仍给出隐式声明警告