关于 lambda

学术版

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

通过对 10^8 个随机生成的正整数降序排序,得出的结果如下:

存在一定误差,不过看起来确实是 lambda 比较快


by xiezheyuan @ 2024-11-29 07:45:51

@zhangbo1000 理论无,实际忽略不计。

https://godbolt.org/z/eqYGd1M9K

可以看到 lambda 和普通函数调用逻辑几乎一致。


by denominator @ 2024-11-29 08:28:19

多次测试对 10^7 个数排序,结果如下。

空白对照 使用函数 使用 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 表达式将近差了一倍?


| 下一页