Perl preallocates hashes with 8 buckets. That takes some space, but that's just 32 bytes. So, if you have 4 elements in the hash, you would be wasting 16 bytes on most hashes, 20 bytes on a few, and maybe 24 bytes on a handful of hashes. This may look a lot, but compared to the minimum amount of memory a hash takes, this isn't that much.

perl -MDevel::Size -wle 'print Devel::Size::size ({})' 100

That's 100 bytes for a reference to an empty hash. And the reference isn't taking the majority of the memory!

If you want to save on your memory usage, you are way better off cutting down on your 120k hashes.

Abigail


In reply to Re: A memory efficient hash, trading off speed - does it already exist? by Abigail-II
in thread A memory efficient hash, trading off speed - does it already exist? by JPaul

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.