Devel ::尺寸报告的子尺寸

Nat*_*enn 3 c perl internals subroutine

我刚刚从Gabor Szabo 阅读这篇文章,他指出Devel :: Size报告说一个简单sub {}的报告需要8,516字节的空间.报告的尺寸是否正确?如果是这样,为什么Perl需要为一个空子程序分配这么多空间?

ike*_*ami 5

$ perl -MDevel::Size=total_size -E'
   my $s = "x" x 100_000;
   my $x = \$s;
   my $y = \$s;
   say total_size($x);
   say total_size($y);
'
100048
100048
Run Code Online (Sandbox Code Playgroud)

这是否意味着大小$x$y组合是200KB?不,这里的想法相同.

它不是sub的大小,而是引用的大小,以及它引用的所有内容,直接和间接.

$ perl -MDevel::Size=total_size -E'
    sub f { }   say total_size(\&f);
    ${"xxx"}=1; say total_size(\&f);
    ${"yyy"}=1; say total_size(\&f);
'
5847
5908
5969
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这不仅仅是测量.似乎有一个指向sub的命名空间的指针.