Good day, everyone.

It is commonly known that it is mildly inefficient to tack items onto an array one by one, particularly with large amounts of data. This is less true if the array is pre-extended, however. If I understand correctly, this is because the array has to find a hunk of RAM big enough to hold the array with the new data, and move itself to the new spot in its entirety, which can be slow.

What I am wondering is this... does the same work backwards? If you pop or shift items off a large array one at a time, does it simply deallocate the memory those elements used, or does it still have to move the whole dad-gum array with each removal?

The reason I ask is because I am using an array which holds quite a remarkable amount of data, and I need to rifle through it only once. It occurred to me that it may be a good idea to shift() each element off the array as I go, therefore freeing up the memory a bit sooner, but if the array must be relocated in memory with each shift(), that would aggravate the problem rather than soothe it.

An alternative is that I could just find something better to do with my time than belly-aching about the finer points of array memory allocation in Perl... but that would be downright loony.

Thanks,

Hot Pastrami

In reply to Memory efficiency with arrays by Hot Pastrami

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.