zhangbo1000 @ 2024-11-29 06:57:59
在函数参数中的函数(比如 std::sort
的第三个参数)改成等价的 Lambda 表达式,会对运行速度产生影响吗?
by xk2013 @ 2024-11-29 07:01:46
@zhangbo1000 估计会稍微慢一丢丢
by N_z_ @ 2024-11-29 07:04:16
理论上没有吧。
by N_z_ @ 2024-11-29 07:06:49
@xk2013 有道理吗。
by spire001 @ 2024-11-29 07:28:19
@Nz 应该会快一点而不是慢一点,原因是 lambda
内部原理是仿函数,比传入函数指针要快。
by N_z_ @ 2024-11-29 07:29:32
@spire001 为啥我记得是内联相关原因。
by ZnPdCo @ 2024-11-29 07:33:25
@Nz 但是lambda似乎会进行进一步的内联展开
https://godbolt.org/z/recfTcY66
by wangyishan @ 2024-11-29 07:33:48
没有吧
by cjrawa @ 2024-11-29 07:43:22
@zhangbo1000
通过对
lambda
:8.784scmp
:15.326sgreater<int>()
:8.662s存在一定误差,不过看起来确实是 lambda 比较快
by xiezheyuan @ 2024-11-29 07:45:51
@zhangbo1000 理论无,实际忽略不计。
https://godbolt.org/z/eqYGd1M9K
可以看到 lambda 和普通函数调用逻辑几乎一致。
by denominator @ 2024-11-29 08:28:19
多次测试对
空白对照 | 使用函数 | 使用 Lambda |
---|---|---|
0.000000006 | 2.543219018 | 1.313197721 |
0.000000006 | 2.464026062 | 1.635510247 |
0.000000007 | 2.464338948 | 1.288303116 |
0.000000006 | 2.475494624 | 1.337860305 |
0.000000006 | 2.612943055 | 1.291864318 |
0.000000006 | 2.479626202 | 1.277722291 |
0.000000006 | 2.467117560 | 1.278555177 |
0.000000005 | 2.620139013 | 1.289744046 |
0.000000006 | 2.472421499 | 1.289661767 |
0.000000006 | 2.592208173 | 1.323169010 |
0.000000006 | 2.468666522 | 1.283117665 |
0.000000005 | 2.781722750 | 1.404423349 |
0.000000006 | 3.285206847 | 1.491458975 |
0.000000006 | 2.481951831 | 1.293021135 |
0.000000006 | 2.459248643 | 1.296069347 |
0.000000006 | 2.605754379 | 1.348892636 |
0.000000007 | 3.100258133 | 1.662819309 |
0.000000006 | 2.601328597 | 1.286215309 |
0.000000005 | 2.533376537 | 1.312370376 |
0.000000006 | 2.506775015 | 1.280280666 |
为什么函数与 Lambda 表达式将近差了一倍?