Most of the discussion by other people seems to be about how to represent the same data in a smaller space. Here is another idea - instead of storing stringifid references, store them as packed data: pack( 'N', $str =~ /x([A-F\d]+)/ ? hex( $1 ) : die ). Your string is now four bytes long instead of at least twice that. You'd unsmash it using some "normal" method. You could also compress your data. I've stored things in memory as six bit characters when I knew I only wanted to use a limited character set and wanted to get the 25% space savings. Similarly with numbers, packing them can yield a shorter binary value than they are when represented as strings.

You shoul also consider whether your algorithm can be changed so that less data has to be in memory at any given time. This is a really good reason to check out Dominus new book Higher Order Perl to get some training on using streams and iterators. Iterators are useful tools to use when altering your code so that less stuff is actually present at any given moment.

Offloading things to disk is another way to save memory. Use BerkeleyDB to get a good disk-bound hash.


In reply to Re: Techniques On Saving Memory by diotalevi
in thread Techniques On Saving Memory by Limbic~Region

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.