vol7ron> Perl で配列参照を逆参照するのはどれくらいコストがかかりますか?
池上> 配列を逆参照するだけではありません。
vol7ron> しかし、問題はまだ残っています
繰り返しますが、これは役に立たない質問です。代替手段は、単に配列を逆参照することと、他の何かを逆参照することではありません。
しかし、あなたが主張するので、私にとっては 37 ns (37 10 億分の 1 秒) です。
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% --
各逆参照にかかる時間 = 1/3187659 秒 - 1/3616848 秒 = 37 ns
それは小さいです!配列の逆参照は、空の配列を逆参照して別の配列にコピーするのにかかる時間の 12% しか占めません!
この操作は最初に分割によってリストを生成し (1)、配列 ref を作成し (2)、逆参照するときに配列 ref の値を新しい配列にコピーしますか (3)?
はい、split
リストを返します。スカラー コンテキストを除きます。
[ ... ]
参照を作成するだけでなく、配列も作成して値をコピーします。
いいえ、逆参照は値をコピーしません。
現在の配列参照をその場でモーフィングしますか?
参照が別のものに変わったら、それは本当に悪いことです。どういう意味ですか?