Devel ::尺寸报告的子尺寸

时间:2014-01-23 00:32:04

标签: c perl subroutine internals

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

2 个答案:

答案 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