我刚刚阅读了来自Gabor Szabo的this文章,他指出Devel :: Size报告称一个简单的sub {}
报告需要8,516字节的空间。报告的尺寸是否正确?如果是这样,为什么Perl需要为一个空子程序分配这么多空间?
答案 0 :(得分: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
这是否意味着$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
正如您所看到的,这不只是测量子。似乎有一个指向子命名空间的指针。
答案 1 :(得分:3)
Devel :: Size在测量像子程序这样的复杂项目的大小时,没有容易理解的规则。
Devel::SizeMe是Devel :: Size的实验性分支,它使用引用计数来决定要包含的内容,因此结果更容易理解。它还包括可视化数据内部结构的方法。
您可以找到Devel :: SizeMe的更多信息,包括幻灯片和截屏视频的链接,here。