Das CPAN-Modul Devel::Size beantwortet die Frage nach dem Speicherverbrauch (RAM) einer Perl-Datenstruktur.
Devel::Size exportiert zwei Funktionen: size() und total_size().
size() ermittelt die Größe der Datenstruktur in Bytes ohne den Inhalt der Datenstruktur.
total_size() ermittelt die Größe der Datenstruktur in Bytes unter Berücksichtigung des Inhalts der Datenstruktur.
Beide Funktionen erwarten eine Referenz (\) auf die Datenstruktur als Parameter.
Beispiel:
#!/usr/bin/perl use strict; use warnings; use Devel::Size qw(size total_size); my $string = '1234567890'; print 'Size string: ' , size(\$string) ,"\n"; print 'TotalSize string: ' , total_size(\$string) , "\n"; print "\n"; my @array = qw( 1 2 3 4 5 6 7 8 9 0); print 'Size array: ' , size(\@array) , "\n"; print 'TotalSize array: ' , total_size(\@array) , "\n"; print "\n"; my %hash = ( 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 0 => 0); print 'Size hash: ' , size(\%hash) , "\n"; print 'TotalSize hash: ' , total_size(\%hash) , "\n"; print "\n"; # Array of Arrays my @AoA = ( [ "fred", "barney" ], [ "george", "jane", "elroy" ], [ "homer", "marge", "bart" ], ); print 'Size AoA: ' , size(\@AoA) , "\n"; print 'TotalSize AoA: ' , total_size(\@AoA) , "\n";
Das Programm erzeugt folgende Ausgabe:
Size string: 36 TotalSize string: 36 Size array: 96 TotalSize array: 376 Size hash: 354 TotalSize hash: 514 Size AoA: 72 TotalSize AoA: 576
Die Wahl der Datenstruktur beeinflußt den Speicherverbrauch enorm. Ein Skalar statt einem Array-of-Arrays benutzt nur 1/40 des Speicherplatzes (in diesem Fall 88 statt 3.512 Bytes).