首页 > 解决方案 > 为什么 substr-lvalue 比四参数 substr 快?

问题描述

这个问题,我们对这两个变体进行基准测试,

substr( $foo, 0, 0 ) = "Hello ";
substr( $foo, 0, 0, "Hello " );

在其中我们发现substr-lvalue更快。池上说,

4-arg substr 如何比 lvalue substr 慢(必须创建一个神奇的标量,并且需要额外的操作)???——池上

说实话,我还认为它会慢很多,只是提到它,因为它是由其他人提出的。纯粹出于好奇,

为什么在上述用例中substr-lvalue 比四个参数快?substr

标签: perlsubstrmicrobenchmark

解决方案


从 5.16.0 开始,lvalue+assign 变体已优化为 4-arg 变体(尽管在 5.20.0 之前,清空的 NOOP 赋值操作仍在执行路径中,这稍微减慢了它的速度)。


推荐阅读