----------------------------------------
> Date: Thu, 23 Aug 2012 20:33:53 +0300
> From: shlo...@shlomifish.org
> To: perl-xs@perl.org
> Subject: How to have perl allocate pointers predictably.
>
> Hi all,
>
> with the included script below, Devel::Leak keeps outputting different 
> pointers each time for
> the leaked SVs. This makes debugging harder. Can I have perl somehow allocate 
> the same pointers
> each time when an allocation is being requested? I don't mind rebuilding a 
> dedicated perl for that
> using perlbrew or whatever. Note that this also happens if make_trouble() is 
> as simple as
> "my $x; $x = \$x;".
On Windows XP I always get the same SV *s assuming all inputs to the process 
are the same on each run.
____________________________________________________
C:\Documents and Settings\Owner\Desktop>perl -e "print \\\"perl\""
SCALAR(0x8fe04c)
C:\Documents and Settings\Owner\Desktop>perl -e "print \\\"perl\""
SCALAR(0x8fe04c)
C:\Documents and Settings\Owner\Desktop>perl -e "print \\\"perl\""
SCALAR(0x8fe04c)
C:\Documents and Settings\Owner\Desktop>perl -e "print \\\"perl\""
SCALAR(0x8fe04c)
C:\Documents and Settings\Owner\Desktop>perl -e "print \\\"perl\""
SCALAR(0x8fe04c)
C:\Documents and Settings\Owner\Desktop>perl -e "print \\\"perl\""
SCALAR(0x8fe04c)
C:\Documents and Settings\Owner\Desktop>
____________________________________________________
C:\Documents and Settings\Owner\Desktop>perl -e "print unpack('J', pack('p', \"p
erl\"))"
9468532
C:\Documents and Settings\Owner\Desktop>perl -e "print unpack('J', pack('p', \"p
erl\"))"
9468532
C:\Documents and Settings\Owner\Desktop>perl -e "print unpack('J', pack('p', \"p
erl\"))"
9468532
C:\Documents and Settings\Owner\Desktop>perl -e "print unpack('J', pack('p', \"p
erl\"))"
9468532
C:\Documents and Settings\Owner\Desktop>perl -e "print unpack('J', pack('p', \"p
erl\"))"
9468532
C:\Documents and Settings\Owner\Desktop>
____________________________________________________
Hash number randomization is irrelevant since the width of the hash array is 
determined by the number of keys/HEKs usually, not the hash number. So the 
memory allocation sizes and order of them to malloc are the same. Its it quite 
popular in "modern" OSes to randomize heaps/dlls/stacks/etc per boot or per 
process nowadays. That is probably what is happening in your case.
                                          

Reply via email to