Hallo zusammen,
ich arbeite mich gerade in die Objektorientierung mit Perl ein (nicht Moose!) und habe eine Frage zu großen Strukturen als Klassenattributen:
Angenommen, ich habe folgenden Konstruktor
sub new
{
my $class = shift;
my $self = {len => shift,
enc => shift,
path => shift};
$self->{file_first} = "filename";
$self->{data_eins} = {};
$self->{data_zwei} = {};
$self->{data_drei} = {};
$self->{data_vier} = {};
bless $self, $class;
return $self;
}
Die vier Hashes sind in dem so erzeugten Objekt nur als Referenzen abgelegt. Als C-Programmierer würde ich dies so interpretieren, dass man hier lediglich vier Pointer auf Daten auf dem Heap (?) gespeichert hat. Man wendet in einer Objektinstanz also lediglich 4 * 4 bzw. 4 * 8 Byte für diese Referenzen auf. Ist die Analogie so korrekt?
Da meine Hashes extrem groß werden können, möchte ich natürlich verhindern, dass diese Daten direkt im Objekt hinterlegt sind (obwohl ich bisher nur auf Situationen gestoßen bin, in denen das Objekt selbst auch nur als Referenz, zB an Funktionen, übergeben werden). Ich bin mir auch überhaupt nicht sicher, ob dies ein potenzielles Problem darstellt, allerdings habe ich die Horrorvorstellung, dass bei Zuweisungen oder Parameterübergaben ohne mein Wissen das gesamte Objekt (inklusive der Hashinhalte) kopiert wird. Ich weiß leider einfach zu wenig über die Perl Speicherverwaltung ...
Viele Grüße
pinwheel
Last edited: 2015-08-08 00:29:11 +0200 (CEST)