gpt4 book ai didi

perl - 在 Perl 中取消引用数组引用的代价有多大?

转载 作者:行者123 更新时间:2023-12-04 15:23:20 26 4
gpt4 key购买 nike

我很好奇 Perl 内部是否创建了 ref 值的副本来创建数组?例如,以下输出分隔字符串的最后一个和第一个值:

say @{[ split( q{\|}, q{bar|is|foo} ) ]}[-1,0];     # STDOUT: foobar\n
  • 操作是否先通过split生成一个列表?并创建一个数组 ref,然后在取消引用时将数组 ref 的值复制到一个新数组中?
  • 它是否将当前的 arrayref 变形到位?

  • 因为取消引用是如此普遍,我确信它已经过优化,我只是好奇它与最初从列表中创建数组相比有多昂贵,例如:
    my @parts = split q{\|}, q{bar|is|foo};
    say @parts[-1,0];

    用途:了解底层操作,无需深入代码

    最佳答案

    这是一个基准

    #!/usr/bin/perl 
    use strict;
    use warnings;
    use 5.010;
    use Benchmark qw(:all);

    my @list = ('foo')x1_000_000;
    my $str = join('|',@list);
    my $count = -2;
    cmpthese($count, {
    'deref' => sub {
    my $parts = [ split( q{\|}, $str ) ];
    my @res = @$parts[-1,0];
    },
    'array' => sub {
    my @parts = split q{\|}, $str;
    my @res = @parts[-1,0];
    },
    });

    我只是换了 say到一个任务。
    Windows 7,perl 5.14.2
            Rate deref array
    deref 2.02/s -- -38%
    array 3.23/s 60% --

    根据环境,我得到
    Linux 64 位,perl 5.14.2
            Rate deref array
    deref 3.00/s -- -35%
    array 4.65/s 55% --

    和 Linux 32 位,perl 5.8.4
            Rate array deref
    array 1.96/s -- -35%
    deref 3.00/s 53% --

    关于perl - 在 Perl 中取消引用数组引用的代价有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18984323/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com