in reply to Re^3: Constructing a hash - why isn't my regex matching anything
in thread Constructing a hash - why isn't my regex matching anything

I think it takes more than that :)
$ cat junk877828.pl #!/usr/bin/perl -- use strict; use warnings; use Data::Dumper; my $k = q!.\root\edit\perl\scripts\scripths\sec\inc\script_auth_ttls.h +-34349;perforcePLF.txt!; my $v = q!//source/new/text/files/data/script_auth_ttls.h - label : 5 +!; #~ $k = $k.$k; #~ $v = $v.$v; my %h; for ( 0 .. 125000 ){ $h{"$k$_"} = "$v$_"; } warn `pslist -m $$ 2>NUL`, ' '; # for linux, i think its `ps v PID ` print Dumper(\%h); warn `pslist -m $$ 2>NUL`, ' '; __END__ $ perl junk877828.pl 1>1 2>2 $ du -h 1 22M 1 $ cat 2 Process memory detail for NAME: Name Pid VM WS Priv Priv Pk Faults Non +P Page perl 1016 81668 36164 34008 34008 9053 +2 29 at junk877828.pl line 15. Process memory detail for NAME: Name Pid VM WS Priv Priv Pk Faults Non +P Page perl 1016 148300 71284 68984 126816 58626 +2 29 at junk877828.pl line 17.
The numbers are in Kbytes and the memory usage doubles due to Data::Dumper, from 78MB to 142MB

Replies are listed 'Best First'.
Re^5: Constructing a hash - why isn't my regex matching anything
by ELISHEVA (Prior) on Dec 19, 2010 at 12:11 UTC

    Well, I'll be....

    Any idea of where all that extra memory usage is coming from (beyond the 78M for Data::Dumper)? That's a lot of extra space for 13M of actual data. Based on a conversation in the CB, hash buckets only account for about half a meg extra, not 60M (or 20M as per another tester in a reply further up)

    Update:A quick check on my machine comes up with 26M for storing key value pairs in an array, and 34M for storing them in a hash:

    key-value pair: 112 bytes total data for 125,000 key-value pairs: 13.25M virtual memory usage for array built via push @aData, $k, $v: 26M virtual memory usage for hash built via $hData{$k} = $v: 34M

    The test script is below

      See illguts and add up the individual HEs, HEKs, SVs, etc. A simple scalar value (SV) already has 4 fields plus the actual data body. And even for the array data type, which is less complex than a hash, an empty entry adds up to around 80 bytes administrative overhead.

      I have no idea :) Maybe its because i have a 64-bit cpu, running 32-bit OS with 32-bit perl, with only 512mb physical memory .... I think its all the virtual memory managers fault :) at least its better than 5.6.1 :) mingw32/msvs6 doesn't make a difference