frei

旧「anney's room」からブログ「frei」だけ引っ越し&残しました

重いぞ、returnさん。

リファレンス、またがんばる。」にて

return の処理の重さについて、気になっていた訳ですが。

今日、昼休みに

のほほんとコーヒーを味わいながら考えてたら

良い比較になりそうな、テストルーチンを思いついたので

帰宅してから実験してみた。

main

#/usr/bin/perl -w

use strict;

use Time::HiRes;

my $timecheck = Time::HiRes::time;

my $checkTimes = $ARGV[1] =~ /^[0-9]+$/ ? $ARGV[1] : 100;

for (1..$checkTimes) {

呼び出し側

}

print Time::HiRes::time - $timecheck."\n";

exit;

sub test {

呼び出され側

}

パターン1

呼び出し側

&test();

呼び出され側

print "test\n";

パターン2

呼び出し側

print &test();

呼び出され側

return "test\n";

つまり、パターン2の方だけ、

わざわざ「test\n」って文字列を return してから

print しているんだけど。

これを$checkTimesを100にして

交互に呼び出すのを100回やって平均値を出したら…

■パターン1

 0.000725365

■パターン2

 0.001099396

…これがビックリ。

パターン1のが 0.000374031 も速かったのでした。

うぉー、そんなに重いのかよ、returnさん!

やっぱり、どんな関数も内部的に何やってるのか

ちゃんとしっかり把握しておくべきだよね。

return も、軽く想像すると、確かに重そうなんだけど

「どうして?」って理屈を、

ちゃんと明確に人様に説明出来るようにならなきゃな。