Ben boyutunda, bir büyüklük haline hatta bazen GBs metinsel verilerin dev bir yığın okur bir uygulama var. Bu skaler üzerinde substr
kullanıyorum, verilerin çoğunu başka bir skalaya okumak ve ayıklanan veriyi boş bir dizeyle değiştirmek, çünkü artık ilk skalerde gerekmiyor. Yakın zamanda bulduğum şey, Perl'in ilk skalenin belleğini boşa çıkarmaması, mantıksal uzunluğunun değiştiğini kabul etmesiydi. Yani yapmam gereken şey, ilk skalerden gelen verileri bir üçüncü tekrar, undef
ilk skaler ayıklamak ve ayıklanan verileri tekrar yerine koymaktır. Sadece bu şekilde, ilk skaler tarafından işgal edilen hafıza gerçekten serbest kalır. Bu scalar veya ayrılmış bellek bloğundan daha az başka bir değere undef atanması, ayrılan bellekle ilgili hiçbir şeyi değiştirmez.Perl: Kapsam dışı kalmaksızın serbest bırakılan skaler belleğin ne zaman boş olduğu?
$$extFileBufferRef = substr($$contentRef, $offset, $length, '');
$length = length($$contentRef);
my $content = substr($$contentRef, 0, $length);
$$contentRef = undef($$contentRef) || $content;
$$contentRef
örneğin olabilir:
aşağıdaki
Şimdi ne yaptığım olduğunu İlk satırda 5 GB boyutunda, 4,9 GB veri alıp çıkarılan verileri değiştiriyorum. İkinci satır şimdi, ör. Dizenin uzunluğu olarak 100 MB veri, ancak ör.Devel::Size::total_size
hala, bu skalar için 5 GB'lik verilerin tahsis edildiğini gösterir. Ve
$$contentRef
için
undef
veya atama bu konu hakkında bir şey değişmez görünmüyor, bunu sayısal alan üzerinde bir fonksiyonu olarak
undef
çağırmanız gerekir.
$$contentRef
'un arkasındaki belleğin substr
uygulandıktan sonra en azından kısmen serbest kalmasını beklerdim. değişkenler kapsam dışına giderseniz ... vaka olmak Yani, bellek sadece arındırılır
gelmiyor mu? Ve eğer öyleyse, neden aynı sayısal alan üzerinde bir fonksiyonu olarak undef
çağrılmasına farklı undef
atama nedir?
Başka bir yerde bu belleğe ** mi ihtiyacınız var? – simbabque
Evet, farklı nedenlerden dolayı verilerin çok sayıda kopyası var ve ek olarak tüm süreç paralel olarak yürütülebiliyor. Yani tüm süreç boyunca boşa harcanan GB bellekler umursamıyorum. Ve evet, kötü bir tasarım ve tüm olabilir, ama şu anda bu şekilde ... –