I'm in the middle of a rather large project, and stopped to do a memory usage sanity check. To my surprise I found a leak and traced it back to the way I was allocating PerlHashes and whatnot.

To boil it down further, look at this PASM:

LOOP: new P1, .PerlHash
branch LOOP

What I'd *expect* is that this would have a steady-state, as each new PerlHash is created it bashes the pointer to the previous PerlHash in P1. The old PerlHash would then get garbage collected and after the second iteration I'd reach a steady-state for memory usage. Kinda like this Perl:


LOOP: $t={};
goto LOOP;

Only that ain't how it works. What happens is that memory gets chewed up quickly. Do I have the wrong idea of how the Px registers are used to point to things (god, I hope not) or is there some GC that needs to happen that isn't (and I can expect it to vanish eventually)?


Reply via email to