Take a look at Devel::Pointer. It has routines for unsmashing smashed references. It works, and I have used it to do something very similar to what you are attempting.
One problem is that you also need to store the type of ref (scalar/array/hash/code) along with the smashed address. That screws the otherwise convenient 32-bit / element storage requirement making the math messier than it ought to be.
The second is you also need to store unsmashed copies of the references so that perl will not GC the elements to which you are storing smashed refs.
That duplication of storage negates much of the benefit, combined with the fact that you are now responsible for managing the memory instead of allowing Perl to take care of it, makes for a heavier and riskier module than might otherwise be the case.
I have the germs of an idea for dealing with that also, but the tools are not available to me to implement it (yet).
In reply to Re: Techniques On Saving Memory
by BrowserUk
in thread Techniques On Saving Memory
by Limbic~Region
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |