So, forgetting all the stuff about faking closures and stuff, your proposing to "just increase the refcount"?
Assuming that you can do that, what happens if the thing you just increased the refcount of, was previously deliberatly weakened by the caller for inclusion into self-referential structure? Or after they've given it to you?
How does it play if your 'array' is initialised by
tie my @a, 'Compact::Array'; @a = ( 'default' ) x 1_000_000;
The refcount on the SV pointing at that constant string 'default' is now 1000000. That's a million chances for it never getting cleaned up properly.
I'm not saying that this isn't possible to do--it is--but these are all things I have had problems with.
It gets even more complicated when you start thinking of the effect of storing references to shared objects and how that plays with threads and threads::shared.
I've spent a fair amount of time looking at the code in threads.xs & shared.xs that has to play similar games with reference counts.
The guys that wrote that code are a darn sight cleverer than I, and still those modules have probably been the source of more leakage than amost any other. That tells me that it's not trivial, even if my failure to make it work properly is down to my stupidity.
In each case, there are a subset of situations in which any given solution will work fine, and for a given specific task, they work okay, but for a general purpose solution, you need to consider all these possibilities and more.
In reply to Re^7: Techniques On Saving Memory
by BrowserUk
in thread Techniques On Saving Memory
by Limbic~Region
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |