in reply to Re^12: Techniques On Saving Memory
in thread Techniques On Saving Memory
How's that? Here's a sample use of the code:int conceal(int var) CODE: SvREFCNT_inc((SV *) var); RETVAL = var; OUTPUT: RETVAL SV * reveal(char *str_or_addr) CODE: char *hex; int addr = (hex = rindex(str_or_addr, 'x')) ? strtol(++hex, NULL, 16) : atoi(str_or_addr); RETVAL = newRV((SV *) addr); SvREFCNT_dec((SV *) addr); OUTPUT: RETVAL
As for all that other satellite data, that could be provided, but this is the crux of the functionality. All it's really lacking right now is sanity checking, to make sure the address is recoverable when in reveal().use Devel::Reference; my $x = [1,2,3]; my $addr = Devel::Reference::conceal($x); # the refcount of [1,2,3] is now 2 undef $x; # the refcount of [1,2,3] is now 1 my $y = Devel::Reference::reveal($addr); # the refcount of [1,2,3] REMAINS at 1 print "@$y\n"; # "1 2 3"
|
|---|