|Perl: the Markov chain saw|
Memory efficiency with arraysby Hot Pastrami (Monk)
|on Jan 05, 2001 at 03:09 UTC||Need Help??|
Hot Pastrami has asked for the
wisdom of the Perl Monks concerning the following question:
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.