Thread Speicherverbrauch Array-Cache vs Hash-Cache
(8 answers)
Opened by Kuerbis at 2022-07-07 09:06
Zuerst war ich verwirrt, weil eigentlich eine Array-Struktur sparsamer ist als eine Hash-Struktur.
Dann fiel es mir auf. Der Vergleich ist unfair. Das folgende ist Dir vielleicht klar/bekannt, aber ich wollte trotzdem nochmal drauf hinweisen. Wenn Du bei einem leeren Array $array[3] = "foo"; setzt, werden implizit bereits die Felder für die Indizes 0, 1, und 2 mitangelegt und belegen damit auch schon Speicher (für die Verwaltung). Dass dann das Array mehr Platz verbraucht, ist klar. In Deinem zweiten Beispiel vergleichst Du einen Hash mit einem Eintrag, mit einem Array, das ( 0x10fffd = 1114109 )+1 Elemente enthält. Von daher wäre meiner Meinung nach erstmal die Frage zu stellen, wie groß würden die Indizes wirklich werden. Ist der Mehrverbrauch an Speicher evtl. doch vernachlässigbar? Beim Vergleich von Hash und Array mit jeweils einem Element schaut der Speicherverbrauch anders aus. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ cat /tmp/t.pl ; perl /tmp/t.pl #! /usr/bin/env perl use strict; use warnings; use 5.020; use Devel::Size qw( size total_size ); my $cache_hash = {}; $cache_hash->{0x0} = 2; say size( $cache_hash ); # 185 say total_size( $cache_hash ); # 209 my $cache_array = \my @cache_array; $cache_array->[0x0] = 2; say size( $cache_array ); # 8_912_944 say total_size( $cache_array ); # 8_912_968 __END__ Last edited: 2022-07-07 22:49:46 +0200 (CEST) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |