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

Kuerbis
 2022-07-07 09:06
#194398 #194398
User since
2011-03-20
938 Artikel
BenutzerIn
[default_avatar]
Hallo,

print_columns in CPAN:Term::Choose benutzt ein Array als Pufferspeicher für Zeichenbreiten:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my $cache = [];

sub print_columns {
    my $str = $_[0];
    my $width = 0;
    for my $i ( 0 .. ( length( $str ) - 1 ) ) {
        my $c = ord substr $str, $i, 1;
        if ( ! defined $cache->[$c] ) {
            $cache->[$c] = char_width( $c );
        }
        $width = $width + $cache->[$c];
    }
    return $width;
}


Der Array-Cache kann im ungünstigsten Fall 9 MB mehr Speicher verbrauchen als ein Hash-Cache.
Sind es diese 9 MB wert zu überlegen, den Array-Cache durch einen Hash-Cache zu ersetzten?


Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
use Devel::Size qw( size total_size );

my $cache_array = [];
$cache_array->[0x10fffd] = 2;
say size( $cache_array );           # 8_912_944
say total_size( $cache_array );     # 8_912_968

my $cache_hash = {};
$cache_hash->{0x10fffd} = 2;
say size( $cache_hash );            # 185
say total_size( $cache_hash );      # 209

View full thread Speicherverbrauch Array-Cache vs Hash-Cache