Sven Rautenberg: Problem: Script braucht zu viel Arbeitsspeicher. Bräuchte Tips.

Beitrag lesen

Hi Sven,

Moin!

Ein Array 1..100,1..100,1..100 belegt 4.000.000 Byte, ungefähr 4 Megabyte.

Wie sicher bist Du Dir, daß PHP intern genau so arbeitet?

Garnicht sicher. Sicher ist nur, daß ein voll genutztes 100x100x100-Array eine Million Einträge enthält, und mindestens soviel Platz erfordert, wie die Daten, die dort abgelegt sind. Als Beispiel, wie schnell ein Array unerwartet groß werden kann, war es doch eindrucksvoll genug, oder?

Ich kenne einige Sprachen, die das tun würden.

Turbo Pascal arbeitet so. Allerdings gibts (zumindest in den DOS-Varianten) das Problem mit den 4 Megabyte nicht, weil das Datensegment höchstens 64 KB groß sein durfte. Alles andere mußte mit Pointern, Listen und Bäumen gelöst werden. Wer dann aber eine Million Einträge im RAM halten will, braucht bei Listen allein deshalb schon mal 4 Megabyte an Pointern (die ja auch 32 Bit=4 Byte groß sind), plus die Datenmenge. Bei Bäumen sind mindestens zwei Pointer pro Datensatz zu erwarten, also 8 MB Verwaltungsinformationen, plus Daten.

Ich schweife ab...

Perl gehört meines Wissens allerdings nicht dazu - soweit ich gehört habe, werden dort auch Arrays zunächst einmal dynamisch angelegt.

Was ja auch Sinn macht, denn unbenutzter Platz muß ja nicht verbraucht werden.

- Sven Rautenberg