Eh, undef
kendisine yapılan tüm başvurular t işaret, yani bir denge ağırlıklı değerini olması gerekiyordu Aynı veri. Bunu diğer hazırlıklar için anlamıyorsun. Yine de buna referans veren yuvanın tavanına ihtiyacınız var. Ancak, Mac OS X üzerinde Perl 5.10 veya 5.11 üzerinde benim için herhangi bir bellek kaydetme görmüyorum. perl
undef
durumunda daha fazla bellek kullanmıyor olabilir, daha fazla bellek kullanarak tahmin ediyor, bu yüzden onu zaten kapmak böylece. Bununla birlikte, şu anda içsellerde bellek kullanımını araştırmak istemiyorum.
Devel::Peek bu şeylerin türlü göstermek için oldukça kullanışlıdır: çıktı ilk başta biraz korkutucu görünüyor
#!perl
use Devel::Peek;
my $a = undef;
my $b = undef;
Dump($a);
Dump($b);
my %hash = map { $_, undef } 1 .. 3;
$hash{4} = 'Hello';
Dump(\%hash);
ancak undef
değerleri NULL(0x0)
yerine tek tek dize değerleri (PV
) ait olduğunu görüyoruz:
SV = NULL(0x0) at 0x100208708
REFCNT = 1
FLAGS = (PADMY)
SV = NULL(0x0) at 0x100208738
REFCNT = 1
FLAGS = (PADMY)
SV = RV(0x100805018) at 0x100805008
REFCNT = 1
FLAGS = (TEMP,ROK)
RV = 0x100208780
SV = PVHV(0x100809ed8) at 0x100208780
REFCNT = 2
FLAGS = (PADMY,SHAREKEYS)
ARRAY = 0x100202200 (0:5, 1:2, 2:1)
hash quality = 91.7%
KEYS = 4
FILL = 3
MAX = 7
RITER = -1
EITER = 0x0
Elt "4" HASH = 0xb803eff9
SV = PV(0x100801c78) at 0x100804ed0
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x100202a30 "Hello"\0
CUR = 5
LEN = 8
Elt "1" HASH = 0x806b80c9
SV = NULL(0x0) at 0x100820db0
REFCNT = 1
FLAGS =()
Elt "3" HASH = 0xa400c7f3
SV = NULL(0x0) at 0x100820df8
REFCNT = 1
FLAGS =()
Bellek sorunlarıyla mı çalışıyorsunuz yoksa merak ediyor musunuz? –
Meraklı. Gördüğüm gibi, değişim fark edilir miktarda ramdan çok az tasarruf edebilir. –