预先知道参数时的性能比较
performance comparison when arguments are pre-known?
我有一个函数
enum Limit {MIN, MAX};
inline int f(pair<int, int> p, Limit l)
{
return l == MIN ? p.first : p.second;
}
比较f(p, MIN)
和p.first
的计算时间,即使在发行版中有一个好的编译器,第一个是否更慢?
性能问题是不可能通过预测来回答的。这完全取决于编译器能做哪些优化。
在这种人为的情况下:
#include <utility>
enum Limit {MIN, MAX};
inline int f(std::pair<int, int> p, Limit l)
{
return l == MIN ? p.first : p.second;
}
extern void emit(int);
int main()
{
auto p = std::make_pair(4, 5);
emit(f(p, MIN));
emit(p.first);
}
没有任何区别:
main: # @main
pushq %rax
movl $4, %edi
callq emit(int)
movl $4, %edi
callq emit(int)
xorl %eax, %eax
popq %rcx
retq
相关文章:
- 为什么constexpr的性能比正常表达式差
- 在现代C++中,侵入式容器是否仍然比非侵入式容器具有性能优势?
- 每个编译器的C++性能,比C#慢200倍
- C++多线程性能比单线程代码慢
- 多线程功能性能比单线螺纹差
- localtime() 比 Linux 上的 gmtime() 性能问题多 24 倍
- 为什么这个普通的数组实现比STD ::向量实现性能慢
- C:pthread的性能,比单线程低
- 全局对象是否提供比多个本地实例更好的性能
- 为什么 std::make_shared<>() 的性能比 boost::make_shared() 好得多?
- 在OpenGL中为顶点、uvs和法线使用一个缓冲区是否比使用三个缓冲区性能更好
- 性能权衡-MATLAB何时比C/C++更好/更慢
- 为什么预分配的函数指针的性能比分支差
- 为什么 std::vector 比本机数组的性能更高
- C++特征库如何比专门的供应商库性能更好
- pthread_mutex锁是否提供比用户在代码中施加的内存屏障更高的性能
- c++ 11委托的函数是否比c++ 03调用init函数的函数性能差?
- 放炮的性能比先放炮后复核的性能差
- 为什么我的散点代码的性能比Vc SIMD更好
- 为什么 C++ fseek/fread 的性能比 C# FileStream 的 Seek/Read 高几倍