2

なぜLEN過去Dump80年からここにいるのですか?

#!/usr/bin/env perl
use warnings;
use strict;
use 5.10.1;
use Devel::Peek;

my $a = 'a';
Dump $a;

print 'Enter an "a": ';
$a = <>;
chomp $a;
Dump $a;

my $b = 'a';
Dump $b;

print 'Enter an "a": ';
my $c = <>;
chomp $c;
Dump $c;

出力:

SV = PV(0x125b090) at 0x127e018
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0x126df80 "a"\0
CUR = 1
LEN = 16
Enter an "a": a
SV = PV(0x125b090) at 0x127e018
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0x126df80 "a"\0
CUR = 1
LEN = 16
SV = PV(0x125b190) at 0x127e0d8
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0x1290da0 "a"\0
CUR = 1
LEN = 16
Enter an "a": a
SV = PV(0x125b1a0) at 0x128f260
REFCNT = 1
FLAGS = (PADMY,POK,pPOK)
PV = 0x1285c70 "a"\0
CUR = 1
LEN = 80
4

1 に答える 1

3

の定義では$c、STDINから設定しているため、インタプリタはおそらく、後でより多くのスペースを割り当てる必要がなくなる可能性を減らすために、その操作用にスペースを事前に割り当てています。

一般に、Perlは、パフォーマンスを損なう可能性があるのではなく、酔った船乗りのようにメモリを消費します。また、メモリが割り当てられると、OSのメモリが不足しない限り、メモリが解放されることはありません。

于 2013-01-17T11:02:15.863 に答える