vol7ron> 在 Perl 中取消引用数组引用有多昂贵?
ikegami> 您所做的不仅仅是取消对数组的引用。
vol7ron> 但问题仍然存在
同样,这是一个无用的问题。替代方案永远不会在简单地取消引用数组和其他东西之间。
但既然你坚持,对我来说它是 37 ns(十亿分之一秒)。
use Benchmark qw( cmpthese );
my %tests = (
deref => 'my @y = @$x;',
none => 'my @y = @x;',
);
$_ = 'use strict; use warnings; our $x; our @x; ' . $_
for values %tests;
{
local our @x = ();
local our $x = \@x;
cmpthese(-3, \%tests);
}
结果:
Rate deref none
deref 3187659/s -- -12%
none 3616848/s 13% --
每个 deref 花费的时间 = 1/3187659 s - 1/3616848 s = 37 ns
它很小!取消引用数组只占取消引用空数组并将其复制到另一个数组的时间的 12%!
该操作是否首先通过 split (1) 生成列表并创建数组 ref (2),然后在取消引用 (3) 时将数组 ref 的值复制到新数组中?
是的,split
返回一个列表。除了在标量上下文中。
[ ... ]
不只是创建一个引用,它还创建一个数组并将值复制到其中。
不,取消引用不会复制值。
它会变形当前的arrayref吗?
如果引用变成了其他东西,那将是非常糟糕的。你到底是什么意思?