[Vienna-pm] Vars in sub max {..}

peter pilsl pilsl at goldfisch.at
Fri Feb 3 05:11:18 PST 2006


Carl A. Schreiber wrote:
>>
> hmm - aber Danke! -
> das würde bedeuten, diese Version ohne Hilfsvariablen wäre bei eine 
> 24h-7d-Programm besser?
> sub max {
>     $_[0] = pop;
>    foreach ( @_ ) { $_[0] = $_ if ($_ > $_[0]) }
> }

?? warum ...

deine alte version ist perfekt. perl kümmert sich darum, dass der 
speicher intern effektiv verwaltet wird und dein OS kümmert sich darum, 
dass perl genug speicher bekommt.

kritisch wirds, wenn du extrem grosse speicherplätze in perl allokierst, 
freigibts und die dann augenblicklich von einer anderen applikation 
benötigt werden. Oder wenn du so komplexe speicherstrukturen hast, dass 
die perl-GC damit überfordert ist.

Für den Hausebrauch wie eine max-funktion ist das alles nix, wo man dran 
denken muss.

Du kannst das alles sehr gut selbst nachvollziehen, indem du dein 
programm absichtlich verbösest, indem du zB in der max-funktion extrem 
viel speicher allokierst ala  $a[100000000]=1;  (die nullen bitte 
nachzählen) und wieder freigibts und die adressen der 
allokierten/definierten variablen anschaust und die mem-entwicklung 
parallel.
spannend hier auch: dein OS sagt die wieviel mem dein perl gerade 
zugeteilt hat. wieviel davon aber perl intern schon wieder freigegeben 
hat, weisst du nicht.  Aber du kannst davon ausgehen, dass perl intern 
da sehr schlau ist und ich hab im ggs. zu unkenrufen die erfahrung 
gemacht, dass perl freien speicher auch relativ schnell wieder an das OS 
retourniert.

lgp


More information about the Vienna-pm mailing list