【问题标题】:Why is the refcount for a sub higher than for an array?为什么 sub 的引用计数高于数组?
【发布时间】:2019-09-21 21:00:05
【问题描述】:

我有这个测试程序:

use strict;
use warnings;
use Devel::Refcount qw( refcount );
my $subref = sub {1};
printf "\$subref has REFCNT=%d\n", refcount( $subref );
my $arrayref = [];
printf "\$arrayref has REFCNT=%d\n", refcount( $arrayref );

输出

$subref has REFCNT=2
$arrayref has REFCNT=1

为什么sub 的引用计数为 2(我预计数组 ref 的引用计数为 1)?

【问题讨论】:

    标签: perl


    【解决方案1】:

    在不涉及闭包的情况下(即 sub 不引用任何外部词法变量),perl 通过共享 sub (CV) 而不是克隆它来优化事物。所以第一个 ref 是针对在编译时创建的“原型”子,在运行时创建的每个 $subref 都有一个额外的 ref(一个指向原始 CV 的 RV)。

    【讨论】:

    • 请参阅this answer 了解必须解决此优化问题的代码:)
    猜你喜欢
    • 2016-03-08
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 2020-04-30
    • 2021-11-19
    • 1970-01-01
    相关资源
    最近更新 更多