<分区>
这之间是否存在任何有值(value)的性能差异:
int myFunction(const int &a) { return 2 + a; }
还有这个:
int myFunction(int a) { return 2 + a; }
?
据我所知,第二种方法将变量的拷贝作为参数传递给新寄存器,这需要在 asm 代码中使用更多指令。这个函数每秒被调用一千次,在这种情况下性能至关重要,传递 const 引用而不是变量更好吗?
<分区>
这之间是否存在任何有值(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/