As long as you don't need to modify the contents of the data you loaded from the file, you should give File::Map a try. It memory-maps the file into your process and into a Perl scalar. Best of all, it doesn't even add that memory to Perl (if read-only) because Linux can just memory-map the filesystem cache into your process. When you unmap it, it definitely gets released back to the OS. (which may or may not choose evict it from the filesystem cache)

One catch, that module operates on a plain scalar, and if you do ANYTHING with that scalar other than use it directly or take a reference to it, Perl is likely to make a copy of it, defeating your optimization. I recommend making a reference to a scalar, then mapping the scalar it references, then pass around the reference, possibly as an object.

Example

package OpenGL::Sandbox::MMap; use strict; use warnings; use File::Map 'map_file'; # ABSTRACT: Wrapper around a memory-mapped scalar ref our $VERSION = '0.120'; # VERSION sub size { length(${(shift)}) } sub new { my ($class, $fname)= @_; my $map; my $self= bless \$map, $class; map_file $map, $fname; $self; } 1;

In reply to Re: Memory efficient design by NERDVANA
in thread Memory efficient design by harangzsolt33

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.