Thread Speicherverbrauch Array-Cache vs Hash-Cache (8 answers)
Opened by Kuerbis at 2022-07-07 09:06

Linuxer
 2022-07-07 20:07
#194404 #194404
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
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__


Code: (dl )
1
2
3
4
179
203
96
120

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!

View full thread Speicherverbrauch Array-Cache vs Hash-Cache