c++ - 传递 const 引用 : performance increase?

标签 c++ performance function reference constants

<分区>

这之间是否存在任何有值(value)的性能差异:

int myFunction(const int &a) { return 2 + a; }

还有这个:

int myFunction(int a) { return 2 + a; }

?

据我所知,第二种方法将变量的拷贝作为参数传递给新寄存器,这需要在 asm 代码中使用更多指令。这个函数每秒被调用一千次,在这种情况下性能至关重要,传递 const 引用而不是变量更好吗?

最佳答案

如果您的编译器看不到这两段代码具有相同的效果,那么它就是一 block 垃圾,您不应该使用它。

但是你的论点是无稽之谈。以下是两者的简单实现:

1: int myFunction(const int &a) { return 2 + a; }
传递 a 的地址。从该地址获取值。添加两个。归还它。

2: int myFunction(int a) { return 2 + a; }
传递 a 的值。添加两个。归还它。

请注意,第二个避免了两个操作——获取a 的地址,然后从该地址获取a 的值。更糟糕的是,第一个只有在 a 存储在内存中时才有效,这意味着如果它不在内存中,则必须将其存储在内存中。哎哟。

每秒只有一千次调用,不会有太大的不同。但是对于编译器可能无法一次看到所有内容的更复杂的情况,标准做法是按值传递“小”类型。当额外间接的成本小于复制值的成本时,您只想通过引用传递。

关于c++ - 传递 const 引用 : performance increase?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24612019/

相关文章:

c++ - 带有 FBO 附件的 glreadpixels

ios - 核心数据并发导入性能

r - 将 data.frames 列表的列表转换为 R 中的单个 data.frame

mysql - 在MySQL中计算上午6点之前和晚上10点之后的时间差

C++:多个变量值的类内部函数

c++ - 使用模板读取 vector

区分枚举类和常规枚举的 C++11 类型特征

c++ - 如何删除由指针数组组成的成员变量

php - C++、Qt 将数据放入Mysql数据库: through PHP script OR directly from the program

performance - 用 D 语言比较两个内存块的最有效方法是什么?