Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Perl bug -- split function #5454

Open
p5pRT opened this issue May 13, 2002 · 26 comments
Open

Perl bug -- split function #5454

p5pRT opened this issue May 13, 2002 · 26 comments

Comments

@p5pRT
Copy link

p5pRT commented May 13, 2002

Migrated from rt.perl.org#9319 (status was 'stalled')

Searchable as RT9319$

@p5pRT
Copy link
Author

p5pRT commented May 13, 2002

From birtl00@dmi.usherb.ca

Hi,
  I got a problem with the 'split' function.

I've attached a program that open each file of a directory one at a
time, read the entire content of the file in a scalar, then attempt to
split the data into list elements of one character each, using the empty
split pattern (//).

The result varies based on the input. For some files (when there are not
many in the directory), it works fine.

Sometimes, after having read 5-6 files, the split function begins to
take a very long time before returning. For the next file, it never
returns, and the CPU is busy 100%. I've run strace on the program and I
saw that no system calls occur when it is stuck in the split function.
The memory usage do not grow, either.

Sometimes, the split function do not slow down too much but the memory
usage grows unbounded, even though the files are not so big. It
consumes all the 512 MB of RAM of my system. I don't see any
circularity in the program that could cause the input not to be garbage
collected.

I've tried the program on two computers running Linux (i386) on
Slackware 8. I tried perl 5.6.0 and 5.6.1, both produces similar
output. The 5.6.1 version was recompiled from the sources, using the
default values as the build options.

Am I doing something really stupid in the program or is there a bug in Perl?
Hopefully you can reproduce the problem on your system. Running the
program in /usr/lib/ triggers the problem for me.

Thanks a lot,

  Laurent Birtz

@p5pRT
Copy link
Author

p5pRT commented May 13, 2002

From birtl00@dmi.usherb.ca

#!/usr/bin/perl -w

use strict;
$| = 1;

main();


sub main
{
my $file_data;
my @array;
my $saved_sep;
my @file_list;

### Get all file in current working directory.
@file_list = <*>;
print("The following files will be tried: @file_list\n\n");

foreach my $file (@file_list)
{
if(! -f $file)
{
print("Skipping $file: not regular\n");
next;
}

print("Opening file '$file'...\n");

open(INPUT_FILE, "<$file")
|| die("Cannot open $file: $!");

### Slurp file in.
$saved_sep = $/;
$/ = undef;
$file_data = <INPUT_FILE>;
$/ = $saved_sep;

### Attempt to split file data.
print("Split..\n");

### On my system it hangs here.
@array = split(//, $file_data);

print("End split..\n");

close(INPUT_FILE)
|| die("Cannot close $file: $!");
}
}

@p5pRT
Copy link
Author

p5pRT commented May 13, 2002

From @iabyn

On Mon, May 13, 2002 at 04​:47​:42PM -0400, Delta wrote​:

Hi,
I got a problem with the 'split' function.

I've attached a program that open each file of a directory one at a
time, read the entire content of the file in a scalar, then attempt to
split the data into list elements of one character each, using the empty
split pattern (//).

The result varies based on the input. For some files (when there are not
many in the directory), it works fine.

Sometimes, after having read 5-6 files, the split function begins to
take a very long time before returning. For the next file, it never
returns, and the CPU is busy 100%. I've run strace on the program and I
saw that no system calls occur when it is stuck in the split function.
The memory usage do not grow, either.

Sometimes, the split function do not slow down too much but the memory
usage grows unbounded, even though the files are not so big. It
consumes all the 512 MB of RAM of my system. I don't see any
circularity in the program that could cause the input not to be garbage
collected.

The problem here is that when you split large strings into 1-character
strings, you are creating extremely large data structures. This is one
reason why it's noticable in /usr/lib - there are many files in there over
1Mb in size. When you split a 1Mb file into charcters, you are creating a
an array with 1,000,000 elements, each of which holds a Perl string that
happens to be 1 character long. Perl strings are quite big objects (if you
think about it, they have the capability to store strings, numbers,
references etc). So splitting a 1Mb file can end up using a couple of
hundred Mb - especially when you take into account the fact that the array
has to be continually extended.

So, when you split your first large file, it takes a while, and memory
usage grows wildly. Then, when you start to split the next file, Perl has
to release those 1 million strings fromt he previous split, which takes
ages, depending on your system's malloc() library and the vagarities of
Perl.

The moral is​: don't split 1Mbyte strings into individual characters :-)

Note to perl5porters​:

This behaviour appears in bleedperl too; after splitting s 2.3Mb file, memory
usage rose to about 250Mb, and freeing the array took several minutes.
(admittedly that was with -DEBUGGING).
gdb showed that the time was being taken up calling sv_free N zillion
times. So,

* for a future Perl, do we have the technology to presize the array in
  @​a = split //, $s
?
* Freeing the 1M scalars does take an *awfully* long time - is this Perl's
fault or malloc()'s - or is that Life?

Dave.

I've tried the program on two computers running Linux (i386) on
Slackware 8. I tried perl 5.6.0 and 5.6.1, both produces similar
output. The 5.6.1 version was recompiled from the sources, using the
default values as the build options.

Am I doing something really stupid in the program or is there a bug in Perl?
Hopefully you can reproduce the problem on your system. Running the
program in /usr/lib/ triggers the problem for me.

Thanks a lot,

Laurent Birtz

#!/usr/bin/perl -w

use strict;
$| = 1;

main();

sub main
{
my $file_data;
my @​array;
my $saved_sep;
my @​file_list;

\#\#\# Get all file in current working directory\.
@&#8203;file\_list = \<\*>;
print\("The following files will be tried&#8203;: @&#8203;file\_list\\n\\n"\);

foreach my $file \(@&#8203;file\_list\)
    \{
    if\(\! \-f $file\)
        \{
        print\("Skipping $file&#8203;: not regular\\n"\);
        next;
        \}
    
    print\("Opening file '$file'\.\.\.\\n"\);
    
    open\(INPUT\_FILE\, "\<$file"\)
        || die\("Cannot open $file&#8203;: $\!"\);
    
    \#\#\# Slurp file in\.
    $saved\_sep = $/;
    $/ = undef;
    $file\_data = \<INPUT\_FILE>;
    $/ = $saved\_sep;

    \#\#\# Attempt to split file data\.
    print\("Split\.\.\\n"\);
    
    \#\#\# On my system it hangs here\.
    @&#8203;array = split\(//\, $file\_data\);
    
    print\("End split\.\.\\n"\);

    close\(INPUT\_FILE\)
        || die\("Cannot close $file&#8203;: $\!"\);
    \}
\}

--
"There's something wrong with our bloody ships today, Chatfield."
Admiral Beatty at the Battle of Jutland, 31st May 1916.

@p5pRT
Copy link
Author

p5pRT commented May 13, 2002

From @paulg1973

Dave Mitchell [mailto​:davem@​fdgroup.com] wonders, based on an inquiry from
Delta,

* Freeing the 1M scalars does take an *awfully* long time -
is this Perl's fault or malloc()'s - or is that Life?

Dave.

I've worked with a number of different operating-system-supplied storage
allocators over the years. They all make the basic assumption that the
caller is allocating a "reasonable" amount of storage and holding onto it
for a "reasonable" length of time. When you have algorithms that
purposefully violate either of these "reasonable" preconditions, you can
beat the performance of said allocator by writing your own. But then, you
are off in the exciting world of dealing with all of the unreasonable
behavior requested by the universe of callers.

The allocator we use on VOS allocates storage that is at least 64-byte
aligned. We allocate in units of 16 bytes. We have a 16-byte overhead for
each block. We have to mask and unmask interrupts on every allocation to
protect against program interrupts. We have to be careful in case the heap
is damaged. Allocation and free performance is a goal, but is outweighed by
correctness, reliability, nonfragmentation, and alignment goals. (By
aligning the data properly we optimize the performance of our clients).

The short answer is that 1M of anything is expensive. The long answer is
that allocating storage is a nontrivial operation. If you want to store a
million bytes efficiently, allocate a million-byte string and use substr.

Any good algorithms course and / or textbook goes into great depth on these
subjects and should be read and studied by any software engineer. This is
just the tip of the icebert. Go get a good book and read it, or find a
local college and take their algorithms course.

HTH
PG

@p5pRT
Copy link
Author

p5pRT commented May 13, 2002

From @paulg1973

s/icebert/iceberg/

With apologies to Bert.

PG

-----Original Message-----
From​: Green, Paul [mailto​:Paul.Green@​stratus.com]
Sent​: Monday, May 13, 2002 7​:13 PM
To​: 'Dave Mitchell'; Delta
Cc​: perl5-porters@​perl.org
Subject​: RE​: [ID 20020513.013] Perl bug -- split function

Dave Mitchell [mailto​:davem@​fdgroup.com] wonders, based on an
inquiry from
Delta,

* Freeing the 1M scalars does take an *awfully* long time -
is this Perl's fault or malloc()'s - or is that Life?

Dave.

I've worked with a number of different
operating-system-supplied storage
allocators over the years. They all make the basic assumption that the
caller is allocating a "reasonable" amount of storage and
holding onto it
for a "reasonable" length of time. When you have algorithms that
purposefully violate either of these "reasonable"
preconditions, you can
beat the performance of said allocator by writing your own.
But then, you
are off in the exciting world of dealing with all of the unreasonable
behavior requested by the universe of callers.

The allocator we use on VOS allocates storage that is at least 64-byte
aligned. We allocate in units of 16 bytes. We have a 16-byte
overhead for
each block. We have to mask and unmask interrupts on every
allocation to
protect against program interrupts. We have to be careful in
case the heap
is damaged. Allocation and free performance is a goal, but is
outweighed by
correctness, reliability, nonfragmentation, and alignment goals. (By
aligning the data properly we optimize the performance of our
clients).

The short answer is that 1M of anything is expensive. The
long answer is
that allocating storage is a nontrivial operation. If you
want to store a
million bytes efficiently, allocate a million-byte string and
use substr.

Any good algorithms course and / or textbook goes into great
depth on these
subjects and should be read and studied by any software
engineer. This is
just the tip of the icebert. Go get a good book and read it,
or find a
local college and take their algorithms course.

HTH
PG

@p5pRT
Copy link
Author

p5pRT commented May 14, 2002

From @iabyn

On Mon, May 13, 2002 at 07​:12​:43PM -0400, Green, Paul wrote​:

Dave Mitchell [mailto​:davem@​fdgroup.com] wonders, based on an inquiry from
Delta,

* Freeing the 1M scalars does take an *awfully* long time -
is this Perl's fault or malloc()'s - or is that Life?
[snip]
The short answer is that 1M of anything is expensive.

I guess what I meant to say was​:

  I would expect freeing 1M scalars to take a long time, but it took
  even longer than I expected (about 100,000 CPU cycles per sv_free()
  for a simple PV), so note to self​: when you have a free minute, check
  that Perl isn't doing anything silly here. It probably isn't, but it
  may be worth checking.

Dave.

--
In England there is a special word which means the last sunshine
of the summer. That word is "spring".

@p5pRT
Copy link
Author

p5pRT commented Apr 21, 2012

From @jkeenan

On Mon May 13 20​:31​:02 2002, RT_System wrote​:

On Mon, May 13, 2002 at 07​:12​:43PM -0400, Green, Paul wrote​:

Dave Mitchell [mailto​:davem@​fdgroup.com] wonders, based on an
inquiry from
Delta,

* Freeing the 1M scalars does take an *awfully* long time -
is this Perl's fault or malloc()'s - or is that Life?
[snip]
The short answer is that 1M of anything is expensive.

I guess what I meant to say was​:

I would expect freeing 1M scalars to take a long time\, but it took
even longer than I expected \(about 100\,000 CPU cycles per sv\_free\(\)
for a simple PV\)\, so note to self&#8203;: when you have a free minute\, check
that Perl isn't doing anything silly here\. It probably isn't\, but it
may be worth checking\.

Reviewing this ticket today, my impression is that it falls into the
category of "Original poster was doing something inadvisable."

So, is Perl "doing anything silly here"? If not, do we need to keep
this ticket open?

Thank you very much.
Jim Keenan

@p5pRT
Copy link
Author

p5pRT commented Apr 21, 2012

From @ikegami

On Mon May 13 20​:31​:02 2002, RT_System wrote​:

On Mon, May 13, 2002 at 07​:12​:43PM -0400, Green, Paul wrote​:

Dave Mitchell [mailto​:davem@​fdgroup.com] wonders, based on an
inquiry from
Delta,

* Freeing the 1M scalars does take an *awfully* long time -
is this Perl's fault or malloc()'s - or is that Life?
[snip]
The short answer is that 1M of anything is expensive.

I guess what I meant to say was​:

I would expect freeing 1M scalars to take a long time\, but it took
even longer than I expected \(about 100\,000 CPU cycles per sv\_free\(\)
for a simple PV\)\, so note to self&#8203;: when you have a free minute\, check
that Perl isn't doing anything silly here\. It probably isn't\, but it
may be worth checking\.

Dave.

It takes 0.1 seconds for me. 32-bit Windows threaded build from
ActivePerl. That doesn't seem unreasonable. What I find interesting is
that C<< split // >> is O(N^2), though.

1,000,000
split and alloc​: 1.4
SV dealloc​: 0.1

5,000,000
split and alloc​: 29.7
SV dealloc​: 0.7

10,000,000
split and alloc​: 118.7
SV dealloc​: 1.3

use strict;
use warnings;

use Time​::HiRes qw( time );

my $x = "x" x 10_000_000;
my $time1 = time;
my @​a = split //, $x;
my $time2 = time;
@​a = ();
my $time3 = time;

printf("split and alloc​: %6.1f\n", $time2-$time1);
printf("SV dealloc​: %6.1f\n", $time3-$time2);

@p5pRT
Copy link
Author

p5pRT commented Apr 22, 2012

From @bulk88

On Sat Apr 21 14​:58​:41 2012, jkeenan wrote​:

Reviewing this ticket today, my impression is that it falls into the
category of "Original poster was doing something inadvisable."

So, is Perl "doing anything silly here"? If not, do we need to keep
this ticket open?
The only way I can think of fixing this would be some kind of scheme
where PVs upto sizeof(void *) or sizeof(IV) get stored in the sv body or
directly in sv head union. Doing a grow above sizeof(void *) or
sizeof(IV) bytes will switch it to a real malloc block. The other fix is
use a bucket allocator similar to *I think* SV heads and/or SV bodys for
PVs under X bytes. The other bug is that the split is quadratic
according to the above. Thankfully the dealloc is linear according to
the above.

I looked at this in C, I think (by eye, not profiler) most of the time
is being spent in

  while (--limit) {
  if (gimme_scalar) {
  iters++;
  } else {
  dstr = newSVpvn(s, 1);

  if (make_mortal)
  sv_2mortal(dstr);

  PUSHs(dstr);
  }

  s++;

  if (s >= strend)
  break;
  }
in pp_split. It would mean the performance of this is basically Perl's
allocators (sv body/head arenas) AND the c lib allocator. It seems
linear superficially, but I'm not sure about Perl's sv allocators. Also
at 100s of MBs of ram which this script takes even though I have 3 GB of
ram on 32 bits, I see alot of "system" cpu time on WinXP something like
30% of my dual core machine (perl is 50%, single thread, max possible).
Im not sure what "system" time is in Windows at the moment and I dont
have time to google it right now.

@p5pRT
Copy link
Author

p5pRT commented Apr 22, 2012

From @bulk88

I thought a bit more. I dont have a Perl build with a C profiler
available, but I thought of NYTProf. But NYTProf doesn't profile all
opcodes, only select opcodes. The quadratic time, it might not be
pp_split to blame. It can be pp_padav or pp_aasign. NYTProf doesn't
provide opcode timings for all opcodes AFAIK. Someone correct me if I am
wrong.

Maybe pp_split should directly write into AVs targ style. But targ is a
Scalar not an Array. I'll throw it out, maybe that can change.

Made with Perl 5.12 and B Concise.

# 7​: my $time1 = time;
8 <;> nextstate(main 408 n13.pl​:7) v​:*,&,{,$
9 <0> pushmark s
a <#> gv[*time] s
b <1> entersub[t5] sKS/TARG,3
c <0> padsv[$time1​:408,412] sRM*/LVINTRO
d <2> sassign vKS/2
# 8​: my @​a = split //, $x;
e <;> nextstate(main 409 n13.pl​:8) v​:*,&,{,$
f <0> pushmark s
g </> pushre(/""/) s/64
h <0> padsv[$x​:407,412] s
i <$> const[IV 0] s
j <@​> split[t7] lK
k <0> pushmark s
l <0> padav[@​a​:409,412] lRM*/LVINTRO
m <2> aassign[t8] vKS
# 9​: my $time2 = time;
n <;> nextstate(main 410 n13.pl​:9) v​:*,&,{,$
o <0> pushmark s
p <#> gv[*time] s
q <1> entersub[t11] sKS/TARG,3
r <0> padsv[$time2​:410,412] sRM*/LVINTRO
s <2> sassign vKS/2
# 10​: @​a = ();
t <;> nextstate(main 411 n13.pl​:10) v​:*,&,{,$
u <0> pushmark s
v <0> pushmark s
w <0> padav[@​a​:409,412] lRM*
x <2> aassign[t12] vKS
# 11​: my $time3 = time;
y <;> nextstate(main 411 n13.pl​:11) v​:*,&,{,$
z <0> pushmark s
10 <#> gv[*time] s
11 <1> entersub[t15] sKS/TARG,3
12 <0> padsv[$time3​:411,412] sRM*/LVINTRO
13 <2> sassign vKS/2
# 13​: printf("split and alloc​: %6.1f\n", $time2-$time1);
14 <;> nextstate(main 412 n13.pl​:13) v​:*,&,{,$
15 <0> pushmark s
16 <$> const[PV "split and alloc​: %6.1f\n"] s
17 <0> padsv[$time2​:410,412] s
18 <0> padsv[$time1​:408,412] s
19 <2> subtract[t17] sK/2
1a <@​> prtf vK

@p5pRT
Copy link
Author

p5pRT commented Apr 22, 2012

From @bulk88

Hacked NYTProf to profile opcodes aassign padav pushmark split.

Long story short. pp_split or a call fron pp_split is the quadratic problem.

6 1 0s my $x = "x" x 1000000;
7 1 0s 2 0s my $time1 = time;
# spent 0s making 1 call to CORE​::pushmark
# spent 0s making 1 call to Time​::HiRes​::time
8 1 5.08s 5 4.53s my @​a = split //, $x;
# spent 3.83s making 1 call to CORE​::split
# spent 703ms making 1 call to CORE​::aassign
# spent 0s making 1 call to CORE​::padav
# spent 0s making 2 calls to CORE​::pushmark, avg 0s/call
9 1 0s 2 0s my $time2 = time;
# spent 0s making 1 call to CORE​::pushmark
# spent 0s making 1 call to Time​::HiRes​::time
10 1 531ms 4 531ms @​a = ();
# spent 531ms making 1 call to CORE​::aassign
# spent 0s making 1 call to CORE​::padav
# spent 0s making 2 calls to CORE​::pushmark, avg 0s/call

6 1 0s my $x = "x" x 2000000;
7 1 0s 2 0s my $time1 = time;
# spent 0s making 1 call to CORE​::pushmark
# spent 0s making 1 call to Time​::HiRes​::time
8 1 15.7s 5 14.6s my @​a = split //, $x;
# spent 13.3s making 1 call to CORE​::split
# spent 1.38s making 1 call to CORE​::aassign
# spent 0s making 1 call to CORE​::padav
# spent 0s making 2 calls to CORE​::pushmark, avg 0s/call
9 1 0s 2 0s my $time2 = time;
# spent 0s making 1 call to CORE​::pushmark
# spent 0s making 1 call to Time​::HiRes​::time
10 1 1.06s 4 1.06s @​a = ();
# spent 1.06s making 1 call to CORE​::aassign
# spent 0s making 1 call to CORE​::padav
# spent 0s making 2 calls to CORE​::pushmark, avg 0s/call

6 1 15.6ms my $x = "x" x 4000000;
7 1 0s 2 0s my $time1 = time;
# spent 0s making 1 call to CORE​::pushmark
# spent 0s making 1 call to Time​::HiRes​::time
8 1 56.5s 5 54.4s my @​a = split //, $x;
# spent 51.6s making 1 call to CORE​::split
# spent 2.78s making 1 call to CORE​::aassign
# spent 0s making 1 call to CORE​::padav
# spent 0s making 2 calls to CORE​::pushmark, avg 0s/call
9 1 0s 2 0s my $time2 = time;
# spent 0s making 1 call to CORE​::pushmark
# spent 0s making 1 call to Time​::HiRes​::time
10 1 2.16s 4 2.16s @​a = ();
# spent 2.16s making 1 call to CORE​::aassign
# spent 0s making 1 call to CORE​::padav
# spent 0s making 2 calls to CORE​::pushmark, avg 0s/call

@p5pRT
Copy link
Author

p5pRT commented Apr 22, 2012

From @bulk88

I made this XS func.

void
SVSpeed()
PPCODE​:
  LARGE_INTEGER my_beg;
  LARGE_INTEGER my_end;
  LARGE_INTEGER my_freq;
  SV * sv;
  int i;
  QueryPerformanceFrequency(&my_freq);
  for(i=0; i < 4000001; i++){
  if(i % 50000 == 0)
  QueryPerformanceCounter(&my_beg);
  sv = newSVpvn("x", 1);
  sv_2mortal(sv);
  if(i % 50000 == 0){
  QueryPerformanceCounter(&my_end);
  printf("time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  }
  }

called it as

use Blah;
Blah​::SVSpeed();

got

C​:\Perl>perl svspeed.pl
time=0.000003
time=0.000002
time=0.000003
time=0.000003
time=0.000005
time=0.000002
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000002
time=0.000003
time=0.000003
time=0.000002
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.009444
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000009
time=0.000003
time=0.000003
time=0.000003
time=0.000002
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000003
time=0.000002
time=0.000003
time=0.000003

C​:\Perl>

So its not those 2 calls, on a PER call basis. I noticed there was 1
spike. Plus I'm not measuring the time for the first quarter of SV
creations vs the last quarter. I'll try cut up the sv generations and
see if later ones take longer as a whole than earlier ones.

@p5pRT
Copy link
Author

p5pRT commented Apr 22, 2012

From @bulk88

rewrote as

void
SVSpeed()
PPCODE​:
  LARGE_INTEGER my_beg;
  LARGE_INTEGER my_end;
  LARGE_INTEGER my_freq;
  SV * sv;
  int i;
  QueryPerformanceFrequency(&my_freq);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  sv = newSVpvn("x", 1);
  sv_2mortal(sv);
  }
  QueryPerformanceCounter(&my_end);
  printf("time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  sv = newSVpvn("x", 1);
  sv_2mortal(sv);
  }
  QueryPerformanceCounter(&my_end);
  printf("time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  sv = newSVpvn("x", 1);
  sv_2mortal(sv);
  }
  QueryPerformanceCounter(&my_end);
  printf("time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  sv = newSVpvn("x", 1);
  sv_2mortal(sv);
  }
  QueryPerformanceCounter(&my_end);
  printf("time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);

result

C​:\Perl>perl svspeed.pl
time=3.949501
time=10.233058
time=15.953743
time=22.295258

C​:\Perl>

We have the culprit. I am done.

@p5pRT
Copy link
Author

p5pRT commented Apr 22, 2012

From @bulk88

Ok, actually problem is the mortal system.

C​:\Perl>perl svspeed.pl
newsv time=0.587146
mortal time=2.857621
newsv time=0.579447
mortal time=9.141501
newsv time=0.582962
mortal time=15.362363
newsv time=0.585780
mortal time=22.163787

C​:\Perl>

void
SVSpeed()
PPCODE​:
  LARGE_INTEGER my_beg;
  LARGE_INTEGER my_end;
  LARGE_INTEGER my_freq;
  SV * sv;
  int i;
  SV ** arr = malloc(sizeof(SV *) * 1000000);
  QueryPerformanceFrequency(&my_freq);
 
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  arr[i] = newSVpvn("x", 1);
  }
  QueryPerformanceCounter(&my_end);
  printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  sv_2mortal(arr[i]);
  }
  QueryPerformanceCounter(&my_end);
  printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  arr[i] = newSVpvn("x", 1);
  }
  QueryPerformanceCounter(&my_end);
  printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  sv_2mortal(arr[i]);
  }
  QueryPerformanceCounter(&my_end);
  printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  arr[i] = newSVpvn("x", 1);
  }
  QueryPerformanceCounter(&my_end);
  printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  sv_2mortal(arr[i]);
  }
  QueryPerformanceCounter(&my_end);
  printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  arr[i] = newSVpvn("x", 1);
  }
  QueryPerformanceCounter(&my_end);
  printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
  QueryPerformanceCounter(&my_beg);
  for(i=0; i < 1000000; i++){
  sv_2mortal(arr[i]);
  }
  QueryPerformanceCounter(&my_end);
  printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);

@p5pRT
Copy link
Author

p5pRT commented Apr 22, 2012

From @iabyn

On Sun, Apr 22, 2012 at 12​:53​:06AM -0700, bulk 88 via RT wrote​:

Ok, actually problem is the mortal system.

C​:\Perl>perl svspeed.pl
newsv time=0.587146
mortal time=2.857621
newsv time=0.579447
mortal time=9.141501
newsv time=0.582962
mortal time=15.362363
newsv time=0.585780
mortal time=22.163787

C​:\Perl>

void
SVSpeed()
PPCODE​:
LARGE_INTEGER my_beg;
LARGE_INTEGER my_end;
LARGE_INTEGER my_freq;
SV * sv;
int i;
SV ** arr = malloc(sizeof(SV *) * 1000000);
QueryPerformanceFrequency(&my_freq);

QueryPerformanceCounter\(&my\_beg\);
for\(i=0; i \< 1000000; i\+\+\)\{
    arr\[i\] = newSVpvn\("x"\, 1\);
\}
QueryPerformanceCounter\(&my\_end\);
printf\("newsv time=%f\\n"\,

((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
QueryPerformanceCounter(&my_beg);
for(i=0; i < 1000000; i++){
sv_2mortal(arr[i]);
}
QueryPerformanceCounter(&my_end);
printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
QueryPerformanceCounter(&my_beg);
for(i=0; i < 1000000; i++){
arr[i] = newSVpvn("x", 1);
}
QueryPerformanceCounter(&my_end);
printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
QueryPerformanceCounter(&my_beg);
for(i=0; i < 1000000; i++){
sv_2mortal(arr[i]);
}
QueryPerformanceCounter(&my_end);
printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
QueryPerformanceCounter(&my_beg);
for(i=0; i < 1000000; i++){
arr[i] = newSVpvn("x", 1);
}
QueryPerformanceCounter(&my_end);
printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
QueryPerformanceCounter(&my_beg);
for(i=0; i < 1000000; i++){
sv_2mortal(arr[i]);
}
QueryPerformanceCounter(&my_end);
printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
QueryPerformanceCounter(&my_beg);
for(i=0; i < 1000000; i++){
arr[i] = newSVpvn("x", 1);
}
QueryPerformanceCounter(&my_end);
printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
QueryPerformanceCounter(&my_beg);
for(i=0; i < 1000000; i++){
sv_2mortal(arr[i]);
}
QueryPerformanceCounter(&my_end);
printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);

I don't see similar slowdowns on linux with perl 5.15.9; I presume it must
be something to do with the windows malloc not liking repeated realloc()s
of the tmps stack​:

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

#include <sys/time.h>

MODULE = Mytest PACKAGE = Mytest

void
hello()
PPCODE​:
  struct timeval t1, t2;
  SV * sv;
  int i;
  int j;
  SV ** arr = malloc(sizeof(SV *) * 1000000);

  for (j=1; j<=5; j++) {
  gettimeofday(&t1, NULL);
  for(i=0; i < 1000000; i++){
  arr[i] = newSVpvn("x", 1);
  }
  gettimeofday(&t2, NULL);
  t2.tv_sec -= t1.tv_sec;
  t2.tv_usec -= t1.tv_usec;
  if (t2.tv_usec < 0) {
  t2.tv_sec--;
  t2.tv_usec += 1000000;
  }
  printf("newsv %d time=%d.%06ds\n", j, t2.tv_sec, t2.tv_usec);

  gettimeofday(&t1, NULL);
  for(i=0; i < 1000000; i++){
  sv_2mortal(arr[i]);
  }
  gettimeofday(&t2, NULL);
  t2.tv_sec -= t1.tv_sec;
  t2.tv_usec -= t1.tv_usec;
  if (t2.tv_usec < 0) {
  t2.tv_sec--;
  t2.tv_usec += 1000000;
  }
  printf("mortal %d time=%d.%06ds\n", j, t2.tv_sec, t2.tv_usec);

  printf("\n");
  }

[davem@​pigeon Mytest]$ perl5159o -Mblib /tmp/p
newsv 1 time=0.194811s
mortal 1 time=0.033377s

newsv 2 time=0.185385s
mortal 2 time=0.033189s

newsv 3 time=0.184901s
mortal 3 time=0.031508s

newsv 4 time=0.185011s
mortal 4 time=0.033563s

newsv 5 time=0.184997s
mortal 5 time=0.032119s

Nor can I see any quadratic slowdown with doing

  @​a = split //, $ling_string,

so again, perhaps its very sensitive to the malloc library?

--
The Enterprise successfully ferries an alien VIP from one place to another
without serious incident.
  -- Things That Never Happen in "Star Trek" #7

@p5pRT
Copy link
Author

p5pRT commented Apr 22, 2012

From @demerphq

On 22 April 2012 13​:25, Dave Mitchell <davem@​iabyn.com> wrote​:

On Sun, Apr 22, 2012 at 12​:53​:06AM -0700, bulk 88 via RT wrote​:

Ok, actually problem is the mortal system.

C​:\Perl>perl svspeed.pl
newsv time=0.587146
mortal time=2.857621
newsv time=0.579447
mortal time=9.141501
newsv time=0.582962
mortal time=15.362363
newsv time=0.585780
mortal time=22.163787

C​:\Perl>

void
SVSpeed()
PPCODE​:
    LARGE_INTEGER my_beg;
    LARGE_INTEGER my_end;
    LARGE_INTEGER my_freq;
    SV * sv;
    int i;
    SV ** arr = malloc(sizeof(SV *) * 1000000);
    QueryPerformanceFrequency(&my_freq);

    QueryPerformanceCounter(&my_beg);
    for(i=0; i < 1000000; i++){
        arr[i] = newSVpvn("x", 1);
    }
    QueryPerformanceCounter(&my_end);
    printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
    QueryPerformanceCounter(&my_beg);
    for(i=0; i < 1000000; i++){
        sv_2mortal(arr[i]);
    }
    QueryPerformanceCounter(&my_end);
    printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
    QueryPerformanceCounter(&my_beg);
    for(i=0; i < 1000000; i++){
        arr[i] = newSVpvn("x", 1);
    }
    QueryPerformanceCounter(&my_end);
    printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
    QueryPerformanceCounter(&my_beg);
    for(i=0; i < 1000000; i++){
        sv_2mortal(arr[i]);
    }
    QueryPerformanceCounter(&my_end);
    printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
    QueryPerformanceCounter(&my_beg);
    for(i=0; i < 1000000; i++){
        arr[i] = newSVpvn("x", 1);
    }
    QueryPerformanceCounter(&my_end);
    printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
    QueryPerformanceCounter(&my_beg);
    for(i=0; i < 1000000; i++){
        sv_2mortal(arr[i]);
    }
    QueryPerformanceCounter(&my_end);
    printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
    QueryPerformanceCounter(&my_beg);
    for(i=0; i < 1000000; i++){
        arr[i] = newSVpvn("x", 1);
    }
    QueryPerformanceCounter(&my_end);
    printf("newsv time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);
    QueryPerformanceCounter(&my_beg);
    for(i=0; i < 1000000; i++){
        sv_2mortal(arr[i]);
    }
    QueryPerformanceCounter(&my_end);
    printf("mortal time=%f\n",
((double)(my_end.QuadPart-my_beg.QuadPart))/(double)my_freq.QuadPart);

I don't see similar slowdowns on linux with perl 5.15.9; I presume it must
be something to do with the windows malloc not liking repeated realloc()s
of the tmps stack​:

This is a known issue, windows realloc did/does not extend segments.
It always copies. IIRC we (nicholas) did a patch to SvGROW to
ameliorate this. Maybe growing the stack by 10% each time would reduce
it.

Yves

--
perl -Mre=debug -e "/just|another|perl|hacker/"

@p5pRT
Copy link
Author

p5pRT commented Apr 23, 2012

From @iabyn

On Sun, Apr 22, 2012 at 04​:04​:12PM +0200, demerphq wrote​:

This is a known issue, windows realloc did/does not extend segments.
It always copies. IIRC we (nicholas) did a patch to SvGROW to
ameliorate this. Maybe growing the stack by 10% each time would reduce
it.

Since 5.005_03, the tmps stack has been grown in chunks of 128 up to 512,
then in chunks of 512 after that.

--
The Enterprise successfully ferries an alien VIP from one place to another
without serious incident.
  -- Things That Never Happen in "Star Trek" #7

@p5pRT
Copy link
Author

p5pRT commented Apr 23, 2012

From @nwc10

["bulk 88", thanks for diagnosing that the problem on Win32 is with the
realloc() when creating new mortals. This is useful knowledge.]

On Mon, Apr 23, 2012 at 10​:08​:18AM +0100, Dave Mitchell wrote​:

On Sun, Apr 22, 2012 at 04​:04​:12PM +0200, demerphq wrote​:

This is a known issue, windows realloc did/does not extend segments.
It always copies. IIRC we (nicholas) did a patch to SvGROW to
ameliorate this. Maybe growing the stack by 10% each time would reduce
it.

This is the underlying Win32 runtime realloc that has this wonderful
"feature" of always copying? Or something layered on top of it?

Since 5.005_03, the tmps stack has been grown in chunks of 128 up to 512,
then in chunks of 512 after that.

Given that the perl "malloc" for ithreads & fork emulation already ends
up returning pointers "incompatible" with the system malloc thanks to the
tracking header, would it be sensible to investigate defaulting Win32 to
using perl's malloc.c? (With -DPERL_SBRK_VIA_MALLOC so that the win32 system
malloc supplies the "raw" memory that malloc.c partitions)

It seems crazy to have to keep putting in place work arounds for what is a
solved problem.

Nicholas Clark

PS I looked to see whether it would be viable to replace the contiguous
  mortal stack into chunks. It seems that a little too much of the core
  assumes that it is a stack to make this easy. And dammit, why are we
  pandering to crap code? This is makework.

@p5pRT
Copy link
Author

p5pRT commented Apr 23, 2012

From @bulk88

On Mon Apr 23 08​:12​:05 2012, nicholas wrote​:

This is the underlying Win32 runtime realloc that has this wonderful
"feature" of always copying? Or something layered on top of it?

Since 5.005_03, the tmps stack has been grown in chunks of 128 up to
512,
then in chunks of 512 after that.

Given that the perl "malloc" for ithreads & fork emulation already ends
up returning pointers "incompatible" with the system malloc thanks to the
tracking header, would it be sensible to investigate defaulting Win32 to
using perl's malloc.c? (With -DPERL_SBRK_VIA_MALLOC so that the win32
system
malloc supplies the "raw" memory that malloc.c partitions)

It seems crazy to have to keep putting in place work arounds for what is a
solved problem.

Nicholas Clark

PS I looked to see whether it would be viable to replace the contiguous
mortal stack into chunks. It seems that a little too much of the core
assumes that it is a stack to make this easy. And dammit, why are we
pandering to crap code? This is makework.

I suggest a percentage growth for the mortal stack realloc rather than
512 blocks, maybe /4 or >>2 (same thing). Or increase it to 4096 bytes
/32bit page size, which at that point will force a kernel call to the
paging system anyways. Is there a macro that is the local page size,
cross platform, already somewhere in Perl?

I made a couple examples of the windows alloc system. I compared Perl's
malloc, to Heap malloc, to C lib malloc. I ran each in its own process,
so they weren't competing for memory. The C lib is msvcr71.dll (vs
2003). -V is below.

I have an issue with Perl using the C lib's malloc system which is
layered over Win32's malloc (Heap*) system. Its wasteful indirection to
go through the c lib on windows. In the Dos Windows days the C lib
actually implemented its own memory allocator, see
http​://msdn.microsoft.com/en-us/library/a6x53890%28v=vs.100%29.aspx but
its not used on NT Windows by default (do we make it the default on Win
Perl :-p? its still available in VS 2010) but without CRT SBH its
nothing but a wrapper for Heap*. I'm not sure if the CRT adds its own
header on top of Heap*. Above the SBH threshold, everything goes to Heap*.

Summary of my perl5 (revision 5 version 12 subversion 2) configuration​:

  Platform​:
  osname=MSWin32, osvers=5.1, archname=MSWin32-x86-multi-thread
  uname=''
  config_args='undef'
  hint=recommended, useposix=true, d_sigaction=undef
  useithreads=define, usemultiplicity=define
  useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
  use64bitint=undef, use64bitall=undef, uselongdouble=undef
  usemymalloc=n, bincompat5005=undef
  Compiler​:
  cc='cl', ccflags ='-nologo -GF -W3 -Od -MD -Zi -DDEBUGGING -DWIN32
-D_CONSOL
E -DNO_STRICT -DHAVE_DES_FCRYPT -DPERL_IMPLICIT_CONTEXT
-DPERL_IMPLICIT_SYS -DU
SE_PERLIO',
  optimize='-Od -MD -Zi -DDEBUGGING',
  cppflags='-DWIN32'
  ccversion='13.10.3077', gccversion='', gccosandvers=''
  intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
  d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8
  ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64',
lseeksi
ze=8
  alignbytes=8, prototype=define
  Linker and Libraries​:
  ld='link', ldflags ='-nologo -nodefaultlib -debug
-libpath​:"c​:\perl512\lib\
CORE" -machine​:x86'
  libpth="c​:\Program Files\Microsoft Visual Studio .NET 2003\VC7\lib"
  libs= oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib
comdlg32
.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib
uuid.lib ws2_
32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib
comctl32.lib msvcr
t.lib
  perllibs= oldnames.lib kernel32.lib user32.lib gdi32.lib
winspool.lib comd
lg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib
uuid.lib
ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib
comctl32.lib m
svcrt.lib
  libc=msvcrt.lib, so=dll, useshrplib=true, libperl=perl512.lib
  gnulibc_version=''
  Dynamic Linking​:
  dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' '
  cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug
-libpath​:"c​:\p
erl512\lib\CORE" -machine​:x86'

Characteristics of this binary (from libperl)​:
  Compile-time options​: DEBUGGING MULTIPLICITY PERL_DONT_CREATE_GVSV
  PERL_IMPLICIT_CONTEXT PERL_IMPLICIT_SYS
  PERL_MALLOC_WRAP PERL_TRACK_MEMPOOL PL_OP_SLAB_ALLOC
  USE_ITHREADS USE_LARGE_FILES USE_PERLIO
  USE_PERL_ATOF
  Built under MSWin32
  Compiled at Mar 23 2011 08​:10​:43
  %ENV​:
  PERL_JSON_BACKEND="JSON​::XS"
  PERL_YAML_BACKEND="YAML"
  @​INC​:
  C​:/perl512/site/lib
  C​:/perl512/lib
  .

@p5pRT
Copy link
Author

p5pRT commented Apr 23, 2012

From @bulk88

ptr changed at 5, ptr=00822ED4
ptr changed at 13, ptr=0083A454
ptr changed at 21, ptr=0083A36C
ptr changed at 29, ptr=0082BB2C
ptr changed at 37, ptr=0083B0D4
ptr changed at 45, ptr=008337B4
ptr changed at 53, ptr=00904E84
ptr changed at 61, ptr=00905D3C
ptr changed at 69, ptr=008EF69C
ptr changed at 77, ptr=008E76DC
ptr changed at 85, ptr=0083A52C
ptr changed at 133, ptr=00928D7C
ptr changed at 141, ptr=0091822C
ptr changed at 2181, ptr=0094F024
ptr changed at 2693, ptr=0094956C
ptr changed at 25917, ptr=0093B304
ptr changed at 25973, ptr=00962DC4
ptr changed at 520157, ptr=00B2003C
ptr changed at 524221, ptr=00BA003C
ptr changed at 528317, ptr=00C3003C
ptr changed at 532413, ptr=00B2003C
ptr changed at 536509, ptr=00BB003C
ptr changed at 540605, ptr=00B2003C
ptr changed at 544701, ptr=00BB003C
ptr changed at 548797, ptr=00B2003C
ptr changed at 552893, ptr=00BB003C
ptr changed at 556989, ptr=00B2003C
ptr changed at 561085, ptr=00BB003C
ptr changed at 565181, ptr=00B2003C
ptr changed at 569277, ptr=00BB003C
ptr changed at 573373, ptr=00B2003C
ptr changed at 577469, ptr=00BB003C
ptr changed at 581565, ptr=00B2003C
ptr changed at 585661, ptr=00BB003C
ptr changed at 589757, ptr=00C4003C
ptr changed at 593853, ptr=00B2003C
ptr changed at 597949, ptr=00BC003C
ptr changed at 602045, ptr=00B2003C
ptr changed at 606141, ptr=00BC003C
ptr changed at 610237, ptr=00B2003C
ptr changed at 614333, ptr=00BC003C
ptr changed at 618429, ptr=00B2003C
ptr changed at 622525, ptr=00BC003C
ptr changed at 626621, ptr=00B2003C
ptr changed at 630717, ptr=00BC003C
ptr changed at 634813, ptr=00B2003C
ptr changed at 638909, ptr=00BC003C
ptr changed at 643005, ptr=00B2003C
ptr changed at 647101, ptr=00BC003C
ptr changed at 651197, ptr=00B2003C
ptr changed at 655293, ptr=00BC003C
ptr changed at 659389, ptr=00C7003C
ptr changed at 663485, ptr=00B2003C
ptr changed at 667581, ptr=00BD003C
ptr changed at 671677, ptr=00B2003C
ptr changed at 675773, ptr=00BD003C
ptr changed at 679869, ptr=00B2003C
ptr changed at 683965, ptr=00BD003C
ptr changed at 688061, ptr=00B2003C
ptr changed at 692157, ptr=00BD003C
ptr changed at 696253, ptr=00B2003C
ptr changed at 700349, ptr=00BD003C
ptr changed at 704445, ptr=00B2003C
ptr changed at 708541, ptr=00BD003C
ptr changed at 712637, ptr=00B2003C
ptr changed at 716733, ptr=00BD003C
ptr changed at 720829, ptr=00C8003C
ptr changed at 724925, ptr=00B2003C
ptr changed at 729021, ptr=00BE003C
ptr changed at 733117, ptr=00B2003C
ptr changed at 737213, ptr=00BE003C
ptr changed at 741309, ptr=00B2003C
ptr changed at 745405, ptr=00BE003C
ptr changed at 749501, ptr=00B2003C
ptr changed at 753597, ptr=00BE003C
ptr changed at 757693, ptr=00B2003C
ptr changed at 761789, ptr=00BE003C
ptr changed at 765885, ptr=00B2003C
ptr changed at 769981, ptr=00BE003C
ptr changed at 774077, ptr=00B2003C
ptr changed at 778173, ptr=00BE003C
ptr changed at 782269, ptr=00B2003C
ptr changed at 786365, ptr=00BE003C
ptr changed at 790461, ptr=00CB003C
ptr changed at 794557, ptr=00B2003C
ptr changed at 798653, ptr=00BF003C
ptr changed at 802749, ptr=00B2003C
ptr changed at 806845, ptr=00BF003C
ptr changed at 810941, ptr=00B2003C
ptr changed at 815037, ptr=00BF003C
ptr changed at 819133, ptr=00B2003C
ptr changed at 823229, ptr=00BF003C
ptr changed at 827325, ptr=00B2003C
ptr changed at 831421, ptr=00BF003C
ptr changed at 835517, ptr=00B2003C
ptr changed at 839613, ptr=00BF003C
ptr changed at 843709, ptr=00B2003C
ptr changed at 847805, ptr=00BF003C
ptr changed at 851901, ptr=00CC003C
ptr changed at 855997, ptr=00B2003C
ptr changed at 860093, ptr=00C0003C
ptr changed at 864189, ptr=00B2003C
ptr changed at 868285, ptr=00C0003C
ptr changed at 872381, ptr=00B2003C
ptr changed at 876477, ptr=00C0003C
ptr changed at 880573, ptr=00B2003C
ptr changed at 884669, ptr=00C0003C
ptr changed at 888765, ptr=00B2003C
ptr changed at 892861, ptr=00C0003C
ptr changed at 896957, ptr=00B2003C
ptr changed at 901053, ptr=00C0003C
ptr changed at 905149, ptr=00B2003C
ptr changed at 909245, ptr=00C0003C
ptr changed at 913341, ptr=00B2003C
ptr changed at 917437, ptr=00C0003C
ptr changed at 921533, ptr=00CF003C
ptr changed at 925629, ptr=00B2003C
ptr changed at 929725, ptr=00C1003C
ptr changed at 933821, ptr=00B2003C
ptr changed at 937917, ptr=00C1003C
ptr changed at 942013, ptr=00B2003C
ptr changed at 946109, ptr=00C1003C
ptr changed at 950205, ptr=00B2003C
ptr changed at 954301, ptr=00C1003C
ptr changed at 958397, ptr=00B2003C
ptr changed at 962493, ptr=00C1003C
ptr changed at 966589, ptr=00B2003C
ptr changed at 970685, ptr=00C1003C
ptr changed at 974781, ptr=00B2003C
ptr changed at 978877, ptr=00C1003C
ptr changed at 982973, ptr=00D0003C
ptr changed at 987069, ptr=00B2003C
ptr changed at 991165, ptr=00C2003C
ptr changed at 995261, ptr=00B2003C
ptr changed at 999357, ptr=00C2003C
ptr changed at 1003453, ptr=00B2003C
ptr changed at 1007549, ptr=00C2003C
ptr changed at 1011645, ptr=00B2003C
ptr changed at 1015741, ptr=00C2003C
ptr changed at 1019837, ptr=00B2003C
ptr changed at 1023933, ptr=00C2003C
ptr changed at 1028029, ptr=00B2003C
ptr changed at 1032125, ptr=00C2003C
ptr changed at 1036221, ptr=00B2003C
ptr changed at 1040317, ptr=00C2003C
ptr changed at 1044413, ptr=00B2003C
ptr changed at 1048509, ptr=00C2003C
ptr changed at 1052605, ptr=00D3003C
ptr changed at 1056701, ptr=00B2003C
ptr changed at 1060797, ptr=00C3003C
ptr changed at 1064893, ptr=00B2003C
ptr changed at 1068989, ptr=00C3003C
ptr changed at 1073085, ptr=00B2003C
ptr changed at 1077181, ptr=00C3003C
ptr changed at 1081277, ptr=00B2003C
ptr changed at 1085373, ptr=00C3003C
ptr changed at 1089469, ptr=00B2003C
ptr changed at 1093565, ptr=00C3003C
ptr changed at 1097661, ptr=00B2003C
ptr changed at 1101757, ptr=00C3003C
ptr changed at 1105853, ptr=00B2003C
ptr changed at 1109949, ptr=00C3003C
ptr changed at 1114045, ptr=00D4003C
ptr changed at 1118141, ptr=00B2003C
ptr changed at 1122237, ptr=00C4003C
ptr changed at 1126333, ptr=00B2003C
ptr changed at 1130429, ptr=00C4003C
ptr changed at 1134525, ptr=00B2003C
ptr changed at 1138621, ptr=00C4003C
ptr changed at 1142717, ptr=00B2003C
ptr changed at 1146813, ptr=00C4003C
ptr changed at 1150909, ptr=00B2003C
ptr changed at 1155005, ptr=00C4003C
ptr changed at 1159101, ptr=00B2003C
ptr changed at 1163197, ptr=00C4003C
ptr changed at 1167293, ptr=00B2003C
ptr changed at 1171389, ptr=00C4003C
ptr changed at 1175485, ptr=00B2003C
ptr changed at 1179581, ptr=00C4003C
ptr changed at 1183677, ptr=00D7003C
ptr changed at 1187773, ptr=00B2003C
ptr changed at 1191869, ptr=00C5003C
ptr changed at 1195965, ptr=00B2003C
ptr changed at 1200061, ptr=00C5003C
ptr changed at 1204157, ptr=00B2003C
ptr changed at 1208253, ptr=00C5003C
ptr changed at 1212349, ptr=00B2003C
ptr changed at 1216445, ptr=00C5003C
ptr changed at 1220541, ptr=00B2003C
ptr changed at 1224637, ptr=00C5003C
ptr changed at 1228733, ptr=00B2003C
ptr changed at 1232829, ptr=00C5003C
ptr changed at 1236925, ptr=00B2003C
ptr changed at 1241021, ptr=00C5003C
ptr changed at 1245117, ptr=00D8003C
ptr changed at 1249213, ptr=00B2003C
ptr changed at 1253309, ptr=00C6003C
ptr changed at 1257405, ptr=00B2003C
ptr changed at 1261501, ptr=00C6003C
ptr changed at 1265597, ptr=00B2003C
ptr changed at 1269693, ptr=00C6003C
ptr changed at 1273789, ptr=00B2003C
ptr changed at 1277885, ptr=00C6003C
ptr changed at 1281981, ptr=00B2003C
ptr changed at 1286077, ptr=00C6003C
ptr changed at 1290173, ptr=00B2003C
ptr changed at 1294269, ptr=00C6003C
ptr changed at 1298365, ptr=00B2003C
ptr changed at 1302461, ptr=00C6003C
ptr changed at 1306557, ptr=00B2003C
ptr changed at 1310653, ptr=00C6003C
ptr changed at 1314749, ptr=00DB003C
ptr changed at 1318845, ptr=00B2003C
ptr changed at 1322941, ptr=00C7003C
ptr changed at 1327037, ptr=00B2003C
ptr changed at 1331133, ptr=00C7003C
ptr changed at 1335229, ptr=00B2003C
ptr changed at 1339325, ptr=00C7003C
ptr changed at 1343421, ptr=00B2003C
ptr changed at 1347517, ptr=00C7003C
ptr changed at 1351613, ptr=00B2003C
ptr changed at 1355709, ptr=00C7003C
ptr changed at 1359805, ptr=00B2003C
ptr changed at 1363901, ptr=00C7003C
ptr changed at 1367997, ptr=00B2003C
ptr changed at 1372093, ptr=00C7003C
ptr changed at 1376189, ptr=00DC003C
ptr changed at 1380285, ptr=00B2003C
ptr changed at 1384381, ptr=00C8003C
ptr changed at 1388477, ptr=00B2003C
ptr changed at 1392573, ptr=00C8003C
ptr changed at 1396669, ptr=00B2003C
ptr changed at 1400765, ptr=00C8003C
ptr changed at 1404861, ptr=00B2003C
ptr changed at 1408957, ptr=00C8003C
ptr changed at 1413053, ptr=00B2003C
ptr changed at 1417149, ptr=00C8003C
ptr changed at 1421245, ptr=00B2003C
ptr changed at 1425341, ptr=00C8003C
ptr changed at 1429437, ptr=00B2003C
ptr changed at 1433533, ptr=00C8003C
ptr changed at 1437629, ptr=00B2003C
ptr changed at 1441725, ptr=00C8003C
ptr changed at 1445821, ptr=00DF003C
ptr changed at 1449917, ptr=00B2003C
ptr changed at 1454013, ptr=00C9003C
ptr changed at 1458109, ptr=00B2003C
ptr changed at 1462205, ptr=00C9003C
ptr changed at 1466301, ptr=00B2003C
ptr changed at 1470397, ptr=00C9003C
ptr changed at 1474493, ptr=00B2003C
ptr changed at 1478589, ptr=00C9003C
ptr changed at 1482685, ptr=00B2003C
ptr changed at 1486781, ptr=00C9003C
ptr changed at 1490877, ptr=00B2003C
ptr changed at 1494973, ptr=00C9003C
ptr changed at 1499069, ptr=00B2003C
ptr changed at 1503165, ptr=00C9003C
ptr changed at 1507261, ptr=00E0003C
ptr changed at 1511357, ptr=00B2003C
ptr changed at 1515453, ptr=00CA003C
ptr changed at 1519549, ptr=00B2003C
ptr changed at 1523645, ptr=00CA003C
ptr changed at 1527741, ptr=00B2003C
ptr changed at 1531837, ptr=00CA003C
ptr changed at 1535933, ptr=00B2003C
ptr changed at 1540029, ptr=00CA003C
ptr changed at 1544125, ptr=00B2003C
ptr changed at 1548221, ptr=00CA003C
ptr changed at 1552317, ptr=00B2003C
ptr changed at 1556413, ptr=00CA003C
ptr changed at 1560509, ptr=00B2003C
ptr changed at 1564605, ptr=00CA003C
ptr changed at 1568701, ptr=00B2003C
ptr changed at 1572797, ptr=00CA003C
ptr changed at 1576893, ptr=00E3003C
ptr changed at 1580989, ptr=00B2003C
ptr changed at 1585085, ptr=00CB003C
ptr changed at 1589181, ptr=00B2003C
ptr changed at 1593277, ptr=00CB003C
ptr changed at 1597373, ptr=00B2003C
ptr changed at 1601469, ptr=00CB003C
ptr changed at 1605565, ptr=00B2003C
ptr changed at 1609661, ptr=00CB003C
ptr changed at 1613757, ptr=00B2003C
ptr changed at 1617853, ptr=00CB003C
ptr changed at 1621949, ptr=00B2003C
ptr changed at 1626045, ptr=00CB003C
ptr changed at 1630141, ptr=00B2003C
ptr changed at 1634237, ptr=00CB003C
ptr changed at 1638333, ptr=00E4003C
ptr changed at 1642429, ptr=00B2003C
ptr changed at 1646525, ptr=00CC003C
ptr changed at 1650621, ptr=00B2003C
ptr changed at 1654717, ptr=00CC003C
ptr changed at 1658813, ptr=00B2003C
ptr changed at 1662909, ptr=00CC003C
ptr changed at 1667005, ptr=00B2003C
ptr changed at 1671101, ptr=00CC003C
ptr changed at 1675197, ptr=00B2003C
ptr changed at 1679293, ptr=00CC003C
ptr changed at 1683389, ptr=00B2003C
ptr changed at 1687485, ptr=00CC003C
ptr changed at 1691581, ptr=00B2003C
ptr changed at 1695677, ptr=00CC003C
ptr changed at 1699773, ptr=00B2003C
ptr changed at 1703869, ptr=00CC003C
ptr changed at 1707965, ptr=00E7003C
ptr changed at 1712061, ptr=00B2003C
ptr changed at 1716157, ptr=00CD003C
ptr changed at 1720253, ptr=00B2003C
ptr changed at 1724349, ptr=00CD003C
ptr changed at 1728445, ptr=00B2003C
ptr changed at 1732541, ptr=00CD003C
ptr changed at 1736637, ptr=00B2003C
ptr changed at 1740733, ptr=00CD003C
ptr changed at 1744829, ptr=00B2003C
ptr changed at 1748925, ptr=00CD003C
ptr changed at 1753021, ptr=00B2003C
ptr changed at 1757117, ptr=00CD003C
ptr changed at 1761213, ptr=00B2003C
ptr changed at 1765309, ptr=00CD003C
ptr changed at 1769405, ptr=00E8003C
ptr changed at 1773501, ptr=00B2003C
ptr changed at 1777597, ptr=00CE003C
ptr changed at 1781693, ptr=00B2003C
ptr changed at 1785789, ptr=00CE003C
ptr changed at 1789885, ptr=00B2003C
ptr changed at 1793981, ptr=00CE003C
ptr changed at 1798077, ptr=00B2003C
ptr changed at 1802173, ptr=00CE003C
ptr changed at 1806269, ptr=00B2003C
ptr changed at 1810365, ptr=00CE003C
ptr changed at 1814461, ptr=00B2003C
ptr changed at 1818557, ptr=00CE003C
ptr changed at 1822653, ptr=00B2003C
ptr changed at 1826749, ptr=00CE003C
ptr changed at 1830845, ptr=00B2003C
ptr changed at 1834941, ptr=00CE003C
ptr changed at 1839037, ptr=00EB003C
ptr changed at 1843133, ptr=00B2003C
ptr changed at 1847229, ptr=00CF003C
ptr changed at 1851325, ptr=00B2003C
ptr changed at 1855421, ptr=00CF003C
ptr changed at 1859517, ptr=00B2003C
ptr changed at 1863613, ptr=00CF003C
ptr changed at 1867709, ptr=00B2003C
ptr changed at 1871805, ptr=00CF003C
ptr changed at 1875901, ptr=00B2003C
ptr changed at 1879997, ptr=00CF003C
ptr changed at 1884093, ptr=00B2003C
ptr changed at 1888189, ptr=00CF003C
ptr changed at 1892285, ptr=00B2003C
ptr changed at 1896381, ptr=00CF003C
ptr changed at 1900477, ptr=00EC003C
ptr changed at 1904573, ptr=00B2003C
ptr changed at 1908669, ptr=00D0003C
ptr changed at 1912765, ptr=00B2003C
ptr changed at 1916861, ptr=00D0003C
ptr changed at 1920957, ptr=00B2003C
ptr changed at 1925053, ptr=00D0003C
ptr changed at 1929149, ptr=00B2003C
ptr changed at 1933245, ptr=00D0003C
ptr changed at 1937341, ptr=00B2003C
ptr changed at 1941437, ptr=00D0003C
ptr changed at 1945533, ptr=00B2003C
ptr changed at 1949629, ptr=00D0003C
ptr changed at 1953725, ptr=00B2003C
ptr changed at 1957821, ptr=00D0003C
ptr changed at 1961917, ptr=00B2003C
ptr changed at 1966013, ptr=00D0003C
ptr changed at 1970109, ptr=00EF003C
ptr changed at 1974205, ptr=00B2003C
ptr changed at 1978301, ptr=00D1003C
ptr changed at 1982397, ptr=00B2003C
ptr changed at 1986493, ptr=00D1003C
ptr changed at 1990589, ptr=00B2003C
ptr changed at 1994685, ptr=00D1003C
ptr changed at 1998781, ptr=00B2003C

@p5pRT
Copy link
Author

p5pRT commented Apr 23, 2012

From @bulk88

ptr changed at 520185, ptr=00B20020
ptr changed at 524249, ptr=00BA0020
ptr changed at 528345, ptr=00C30020
ptr changed at 532441, ptr=00B20020
ptr changed at 536537, ptr=00BB0020
ptr changed at 540633, ptr=00B20020
ptr changed at 544729, ptr=00BB0020
ptr changed at 548825, ptr=00B20020
ptr changed at 552921, ptr=00BB0020
ptr changed at 557017, ptr=00B20020
ptr changed at 561113, ptr=00BB0020
ptr changed at 565209, ptr=00B20020
ptr changed at 569305, ptr=00BB0020
ptr changed at 573401, ptr=00B20020
ptr changed at 577497, ptr=00BB0020
ptr changed at 581593, ptr=00B20020
ptr changed at 585689, ptr=00BB0020
ptr changed at 589785, ptr=00C40020
ptr changed at 593881, ptr=00B20020
ptr changed at 597977, ptr=00BC0020
ptr changed at 602073, ptr=00B20020
ptr changed at 606169, ptr=00BC0020
ptr changed at 610265, ptr=00B20020
ptr changed at 614361, ptr=00BC0020
ptr changed at 618457, ptr=00B20020
ptr changed at 622553, ptr=00BC0020
ptr changed at 626649, ptr=00B20020
ptr changed at 630745, ptr=00BC0020
ptr changed at 634841, ptr=00B20020
ptr changed at 638937, ptr=00BC0020
ptr changed at 643033, ptr=00B20020
ptr changed at 647129, ptr=00BC0020
ptr changed at 651225, ptr=00B20020
ptr changed at 655321, ptr=00BC0020
ptr changed at 659417, ptr=00C70020
ptr changed at 663513, ptr=00B20020
ptr changed at 667609, ptr=00BD0020
ptr changed at 671705, ptr=00B20020
ptr changed at 675801, ptr=00BD0020
ptr changed at 679897, ptr=00B20020
ptr changed at 683993, ptr=00BD0020
ptr changed at 688089, ptr=00B20020
ptr changed at 692185, ptr=00BD0020
ptr changed at 696281, ptr=00B20020
ptr changed at 700377, ptr=00BD0020
ptr changed at 704473, ptr=00B20020
ptr changed at 708569, ptr=00BD0020
ptr changed at 712665, ptr=00B20020
ptr changed at 716761, ptr=00BD0020
ptr changed at 720857, ptr=00C80020
ptr changed at 724953, ptr=00B20020
ptr changed at 729049, ptr=00BE0020
ptr changed at 733145, ptr=00B20020
ptr changed at 737241, ptr=00BE0020
ptr changed at 741337, ptr=00B20020
ptr changed at 745433, ptr=00BE0020
ptr changed at 749529, ptr=00B20020
ptr changed at 753625, ptr=00BE0020
ptr changed at 757721, ptr=00B20020
ptr changed at 761817, ptr=00BE0020
ptr changed at 765913, ptr=00B20020
ptr changed at 770009, ptr=00BE0020
ptr changed at 774105, ptr=00B20020
ptr changed at 778201, ptr=00BE0020
ptr changed at 782297, ptr=00B20020
ptr changed at 786393, ptr=00BE0020
ptr changed at 790489, ptr=00CB0020
ptr changed at 794585, ptr=00B20020
ptr changed at 798681, ptr=00BF0020
ptr changed at 802777, ptr=00B20020
ptr changed at 806873, ptr=00BF0020
ptr changed at 810969, ptr=00B20020
ptr changed at 815065, ptr=00BF0020
ptr changed at 819161, ptr=00B20020
ptr changed at 823257, ptr=00BF0020
ptr changed at 827353, ptr=00B20020
ptr changed at 831449, ptr=00BF0020
ptr changed at 835545, ptr=00B20020
ptr changed at 839641, ptr=00BF0020
ptr changed at 843737, ptr=00B20020
ptr changed at 847833, ptr=00BF0020
ptr changed at 851929, ptr=00CC0020
ptr changed at 856025, ptr=00B20020
ptr changed at 860121, ptr=00C00020
ptr changed at 864217, ptr=00B20020
ptr changed at 868313, ptr=00C00020
ptr changed at 872409, ptr=00B20020
ptr changed at 876505, ptr=00C00020
ptr changed at 880601, ptr=00B20020
ptr changed at 884697, ptr=00C00020
ptr changed at 888793, ptr=00B20020
ptr changed at 892889, ptr=00C00020
ptr changed at 896985, ptr=00B20020
ptr changed at 901081, ptr=00C00020
ptr changed at 905177, ptr=00B20020
ptr changed at 909273, ptr=00C00020
ptr changed at 913369, ptr=00B20020
ptr changed at 917465, ptr=00C00020
ptr changed at 921561, ptr=00CF0020
ptr changed at 925657, ptr=00B20020
ptr changed at 929753, ptr=00C10020
ptr changed at 933849, ptr=00B20020
ptr changed at 937945, ptr=00C10020
ptr changed at 942041, ptr=00B20020
ptr changed at 946137, ptr=00C10020
ptr changed at 950233, ptr=00B20020
ptr changed at 954329, ptr=00C10020
ptr changed at 958425, ptr=00B20020
ptr changed at 962521, ptr=00C10020
ptr changed at 966617, ptr=00B20020
ptr changed at 970713, ptr=00C10020
ptr changed at 974809, ptr=00B20020
ptr changed at 978905, ptr=00C10020
ptr changed at 983001, ptr=00D00020
ptr changed at 987097, ptr=00B20020
ptr changed at 991193, ptr=00C20020
ptr changed at 995289, ptr=00B20020
ptr changed at 999385, ptr=00C20020
ptr changed at 1003481, ptr=00B20020
ptr changed at 1007577, ptr=00C20020
ptr changed at 1011673, ptr=00B20020
ptr changed at 1015769, ptr=00C20020
ptr changed at 1019865, ptr=00B20020
ptr changed at 1023961, ptr=00C20020
ptr changed at 1028057, ptr=00B20020
ptr changed at 1032153, ptr=00C20020
ptr changed at 1036249, ptr=00B20020
ptr changed at 1040345, ptr=00C20020
ptr changed at 1044441, ptr=00B20020
ptr changed at 1048537, ptr=00C20020
ptr changed at 1052633, ptr=00D30020
ptr changed at 1056729, ptr=00B20020
ptr changed at 1060825, ptr=00C30020
ptr changed at 1064921, ptr=00B20020
ptr changed at 1069017, ptr=00C30020
ptr changed at 1073113, ptr=00B20020
ptr changed at 1077209, ptr=00C30020
ptr changed at 1081305, ptr=00B20020
ptr changed at 1085401, ptr=00C30020
ptr changed at 1089497, ptr=00B20020
ptr changed at 1093593, ptr=00C30020
ptr changed at 1097689, ptr=00B20020
ptr changed at 1101785, ptr=00C30020
ptr changed at 1105881, ptr=00B20020
ptr changed at 1109977, ptr=00C30020
ptr changed at 1114073, ptr=00D40020
ptr changed at 1118169, ptr=00B20020
ptr changed at 1122265, ptr=00C40020
ptr changed at 1126361, ptr=00B20020
ptr changed at 1130457, ptr=00C40020
ptr changed at 1134553, ptr=00B20020
ptr changed at 1138649, ptr=00C40020
ptr changed at 1142745, ptr=00B20020
ptr changed at 1146841, ptr=00C40020
ptr changed at 1150937, ptr=00B20020
ptr changed at 1155033, ptr=00C40020
ptr changed at 1159129, ptr=00B20020
ptr changed at 1163225, ptr=00C40020
ptr changed at 1167321, ptr=00B20020
ptr changed at 1171417, ptr=00C40020
ptr changed at 1175513, ptr=00B20020
ptr changed at 1179609, ptr=00C40020
ptr changed at 1183705, ptr=00D70020
ptr changed at 1187801, ptr=00B20020
ptr changed at 1191897, ptr=00C50020
ptr changed at 1195993, ptr=00B20020
ptr changed at 1200089, ptr=00C50020
ptr changed at 1204185, ptr=00B20020
ptr changed at 1208281, ptr=00C50020
ptr changed at 1212377, ptr=00B20020
ptr changed at 1216473, ptr=00C50020
ptr changed at 1220569, ptr=00B20020
ptr changed at 1224665, ptr=00C50020
ptr changed at 1228761, ptr=00B20020
ptr changed at 1232857, ptr=00C50020
ptr changed at 1236953, ptr=00B20020
ptr changed at 1241049, ptr=00C50020
ptr changed at 1245145, ptr=00D80020
ptr changed at 1249241, ptr=00B20020
ptr changed at 1253337, ptr=00C60020
ptr changed at 1257433, ptr=00B20020
ptr changed at 1261529, ptr=00C60020
ptr changed at 1265625, ptr=00B20020
ptr changed at 1269721, ptr=00C60020
ptr changed at 1273817, ptr=00B20020
ptr changed at 1277913, ptr=00C60020
ptr changed at 1282009, ptr=00B20020
ptr changed at 1286105, ptr=00C60020
ptr changed at 1290201, ptr=00B20020
ptr changed at 1294297, ptr=00C60020
ptr changed at 1298393, ptr=00B20020
ptr changed at 1302489, ptr=00C60020
ptr changed at 1306585, ptr=00B20020
ptr changed at 1310681, ptr=00C60020
ptr changed at 1314777, ptr=00DB0020
ptr changed at 1318873, ptr=00B20020
ptr changed at 1322969, ptr=00C70020
ptr changed at 1327065, ptr=00B20020
ptr changed at 1331161, ptr=00C70020
ptr changed at 1335257, ptr=00B20020
ptr changed at 1339353, ptr=00C70020
ptr changed at 1343449, ptr=00B20020
ptr changed at 1347545, ptr=00C70020
ptr changed at 1351641, ptr=00B20020
ptr changed at 1355737, ptr=00C70020
ptr changed at 1359833, ptr=00B20020
ptr changed at 1363929, ptr=00C70020
ptr changed at 1368025, ptr=00B20020
ptr changed at 1372121, ptr=00C70020
ptr changed at 1376217, ptr=00DC0020
ptr changed at 1380313, ptr=00B20020
ptr changed at 1384409, ptr=00C80020
ptr changed at 1388505, ptr=00B20020
ptr changed at 1392601, ptr=00C80020
ptr changed at 1396697, ptr=00B20020
ptr changed at 1400793, ptr=00C80020
ptr changed at 1404889, ptr=00B20020
ptr changed at 1408985, ptr=00C80020
ptr changed at 1413081, ptr=00B20020
ptr changed at 1417177, ptr=00C80020
ptr changed at 1421273, ptr=00B20020
ptr changed at 1425369, ptr=00C80020
ptr changed at 1429465, ptr=00B20020
ptr changed at 1433561, ptr=00C80020
ptr changed at 1437657, ptr=00B20020
ptr changed at 1441753, ptr=00C80020
ptr changed at 1445849, ptr=00DF0020
ptr changed at 1449945, ptr=00B20020
ptr changed at 1454041, ptr=00C90020
ptr changed at 1458137, ptr=00B20020
ptr changed at 1462233, ptr=00C90020
ptr changed at 1466329, ptr=00B20020
ptr changed at 1470425, ptr=00C90020
ptr changed at 1474521, ptr=00B20020
ptr changed at 1478617, ptr=00C90020
ptr changed at 1482713, ptr=00B20020
ptr changed at 1486809, ptr=00C90020
ptr changed at 1490905, ptr=00B20020
ptr changed at 1495001, ptr=00C90020
ptr changed at 1499097, ptr=00B20020
ptr changed at 1503193, ptr=00C90020
ptr changed at 1507289, ptr=00E00020
ptr changed at 1511385, ptr=00B20020
ptr changed at 1515481, ptr=00CA0020
ptr changed at 1519577, ptr=00B20020
ptr changed at 1523673, ptr=00CA0020
ptr changed at 1527769, ptr=00B20020
ptr changed at 1531865, ptr=00CA0020
ptr changed at 1535961, ptr=00B20020
ptr changed at 1540057, ptr=00CA0020
ptr changed at 1544153, ptr=00B20020
ptr changed at 1548249, ptr=00CA0020
ptr changed at 1552345, ptr=00B20020
ptr changed at 1556441, ptr=00CA0020
ptr changed at 1560537, ptr=00B20020
ptr changed at 1564633, ptr=00CA0020
ptr changed at 1568729, ptr=00B20020
ptr changed at 1572825, ptr=00CA0020
ptr changed at 1576921, ptr=00E30020
ptr changed at 1581017, ptr=00B20020
ptr changed at 1585113, ptr=00CB0020
ptr changed at 1589209, ptr=00B20020
ptr changed at 1593305, ptr=00CB0020
ptr changed at 1597401, ptr=00B20020
ptr changed at 1601497, ptr=00CB0020
ptr changed at 1605593, ptr=00B20020
ptr changed at 1609689, ptr=00CB0020
ptr changed at 1613785, ptr=00B20020
ptr changed at 1617881, ptr=00CB0020
ptr changed at 1621977, ptr=00B20020
ptr changed at 1626073, ptr=00CB0020
ptr changed at 1630169, ptr=00B20020
ptr changed at 1634265, ptr=00CB0020
ptr changed at 1638361, ptr=00E40020
ptr changed at 1642457, ptr=00B20020
ptr changed at 1646553, ptr=00CC0020
ptr changed at 1650649, ptr=00B20020
ptr changed at 1654745, ptr=00CC0020
ptr changed at 1658841, ptr=00B20020
ptr changed at 1662937, ptr=00CC0020
ptr changed at 1667033, ptr=00B20020
ptr changed at 1671129, ptr=00CC0020
ptr changed at 1675225, ptr=00B20020
ptr changed at 1679321, ptr=00CC0020
ptr changed at 1683417, ptr=00B20020
ptr changed at 1687513, ptr=00CC0020
ptr changed at 1691609, ptr=00B20020
ptr changed at 1695705, ptr=00CC0020
ptr changed at 1699801, ptr=00B20020
ptr changed at 1703897, ptr=00CC0020
ptr changed at 1707993, ptr=00E70020
ptr changed at 1712089, ptr=00B20020
ptr changed at 1716185, ptr=00CD0020
ptr changed at 1720281, ptr=00B20020
ptr changed at 1724377, ptr=00CD0020
ptr changed at 1728473, ptr=00B20020
ptr changed at 1732569, ptr=00CD0020
ptr changed at 1736665, ptr=00B20020
ptr changed at 1740761, ptr=00CD0020
ptr changed at 1744857, ptr=00B20020
ptr changed at 1748953, ptr=00CD0020
ptr changed at 1753049, ptr=00B20020
ptr changed at 1757145, ptr=00CD0020
ptr changed at 1761241, ptr=00B20020
ptr changed at 1765337, ptr=00CD0020
ptr changed at 1769433, ptr=00E80020
ptr changed at 1773529, ptr=00B20020
ptr changed at 1777625, ptr=00CE0020
ptr changed at 1781721, ptr=00B20020
ptr changed at 1785817, ptr=00CE0020
ptr changed at 1789913, ptr=00B20020
ptr changed at 1794009, ptr=00CE0020
ptr changed at 1798105, ptr=00B20020
ptr changed at 1802201, ptr=00CE0020
ptr changed at 1806297, ptr=00B20020
ptr changed at 1810393, ptr=00CE0020
ptr changed at 1814489, ptr=00B20020
ptr changed at 1818585, ptr=00CE0020
ptr changed at 1822681, ptr=00B20020
ptr changed at 1826777, ptr=00CE0020
ptr changed at 1830873, ptr=00B20020
ptr changed at 1834969, ptr=00CE0020
ptr changed at 1839065, ptr=00EB0020
ptr changed at 1843161, ptr=00B20020
ptr changed at 1847257, ptr=00CF0020
ptr changed at 1851353, ptr=00B20020
ptr changed at 1855449, ptr=00CF0020
ptr changed at 1859545, ptr=00B20020
ptr changed at 1863641, ptr=00CF0020
ptr changed at 1867737, ptr=00B20020
ptr changed at 1871833, ptr=00CF0020
ptr changed at 1875929, ptr=00B20020
ptr changed at 1880025, ptr=00CF0020
ptr changed at 1884121, ptr=00B20020
ptr changed at 1888217, ptr=00CF0020
ptr changed at 1892313, ptr=00B20020
ptr changed at 1896409, ptr=00CF0020
ptr changed at 1900505, ptr=00EC0020
ptr changed at 1904601, ptr=00B20020
ptr changed at 1908697, ptr=00D00020
ptr changed at 1912793, ptr=00B20020
ptr changed at 1916889, ptr=00D00020
ptr changed at 1920985, ptr=00B20020
ptr changed at 1925081, ptr=00D00020
ptr changed at 1929177, ptr=00B20020
ptr changed at 1933273, ptr=00D00020
ptr changed at 1937369, ptr=00B20020
ptr changed at 1941465, ptr=00D00020
ptr changed at 1945561, ptr=00B20020
ptr changed at 1949657, ptr=00D00020
ptr changed at 1953753, ptr=00B20020
ptr changed at 1957849, ptr=00D00020
ptr changed at 1961945, ptr=00B20020
ptr changed at 1966041, ptr=00D00020
ptr changed at 1970137, ptr=00EF0020
ptr changed at 1974233, ptr=00B20020
ptr changed at 1978329, ptr=00D10020
ptr changed at 1982425, ptr=00B20020
ptr changed at 1986521, ptr=00D10020
ptr changed at 1990617, ptr=00B20020
ptr changed at 1994713, ptr=00D10020
ptr changed at 1998809, ptr=00B20020

@p5pRT
Copy link
Author

p5pRT commented Apr 23, 2012

From @bulk88

ptr changed at 9, ptr=002874E0
ptr changed at 17, ptr=00288500
ptr changed at 31489, ptr=00B20048
ptr changed at 520185, ptr=00C20020
ptr changed at 524249, ptr=00CA0020
ptr changed at 528345, ptr=00D30020
ptr changed at 532441, ptr=00C20020
ptr changed at 536537, ptr=00CB0020
ptr changed at 540633, ptr=00C20020
ptr changed at 544729, ptr=00CB0020
ptr changed at 548825, ptr=00C20020
ptr changed at 552921, ptr=00CB0020
ptr changed at 557017, ptr=00C20020
ptr changed at 561113, ptr=00CB0020
ptr changed at 565209, ptr=00C20020
ptr changed at 569305, ptr=00CB0020
ptr changed at 573401, ptr=00C20020
ptr changed at 577497, ptr=00CB0020
ptr changed at 581593, ptr=00C20020
ptr changed at 585689, ptr=00CB0020
ptr changed at 589785, ptr=00D40020
ptr changed at 593881, ptr=00C20020
ptr changed at 597977, ptr=00CC0020
ptr changed at 602073, ptr=00C20020
ptr changed at 606169, ptr=00CC0020
ptr changed at 610265, ptr=00C20020
ptr changed at 614361, ptr=00CC0020
ptr changed at 618457, ptr=00C20020
ptr changed at 622553, ptr=00CC0020
ptr changed at 626649, ptr=00C20020
ptr changed at 630745, ptr=00CC0020
ptr changed at 634841, ptr=00C20020
ptr changed at 638937, ptr=00CC0020
ptr changed at 643033, ptr=00C20020
ptr changed at 647129, ptr=00CC0020
ptr changed at 651225, ptr=00C20020
ptr changed at 655321, ptr=00CC0020
ptr changed at 659417, ptr=00D70020
ptr changed at 663513, ptr=00C20020
ptr changed at 667609, ptr=00CD0020
ptr changed at 671705, ptr=00C20020
ptr changed at 675801, ptr=00CD0020
ptr changed at 679897, ptr=00C20020
ptr changed at 683993, ptr=00CD0020
ptr changed at 688089, ptr=00C20020
ptr changed at 692185, ptr=00CD0020
ptr changed at 696281, ptr=00C20020
ptr changed at 700377, ptr=00CD0020
ptr changed at 704473, ptr=00C20020
ptr changed at 708569, ptr=00CD0020
ptr changed at 712665, ptr=00C20020
ptr changed at 716761, ptr=00CD0020
ptr changed at 720857, ptr=00D80020
ptr changed at 724953, ptr=00C20020
ptr changed at 729049, ptr=00CE0020
ptr changed at 733145, ptr=00C20020
ptr changed at 737241, ptr=00CE0020
ptr changed at 741337, ptr=00C20020
ptr changed at 745433, ptr=00CE0020
ptr changed at 749529, ptr=00C20020
ptr changed at 753625, ptr=00CE0020
ptr changed at 757721, ptr=00C20020
ptr changed at 761817, ptr=00CE0020
ptr changed at 765913, ptr=00C20020
ptr changed at 770009, ptr=00CE0020
ptr changed at 774105, ptr=00C20020
ptr changed at 778201, ptr=00CE0020
ptr changed at 782297, ptr=00C20020
ptr changed at 786393, ptr=00CE0020
ptr changed at 790489, ptr=00DB0020
ptr changed at 794585, ptr=00C20020
ptr changed at 798681, ptr=00CF0020
ptr changed at 802777, ptr=00C20020
ptr changed at 806873, ptr=00CF0020
ptr changed at 810969, ptr=00C20020
ptr changed at 815065, ptr=00CF0020
ptr changed at 819161, ptr=00C20020
ptr changed at 823257, ptr=00CF0020
ptr changed at 827353, ptr=00C20020
ptr changed at 831449, ptr=00CF0020
ptr changed at 835545, ptr=00C20020
ptr changed at 839641, ptr=00CF0020
ptr changed at 843737, ptr=00C20020
ptr changed at 847833, ptr=00CF0020
ptr changed at 851929, ptr=00DC0020
ptr changed at 856025, ptr=00C20020
ptr changed at 860121, ptr=00D00020
ptr changed at 864217, ptr=00C20020
ptr changed at 868313, ptr=00D00020
ptr changed at 872409, ptr=00C20020
ptr changed at 876505, ptr=00D00020
ptr changed at 880601, ptr=00C20020
ptr changed at 884697, ptr=00D00020
ptr changed at 888793, ptr=00C20020
ptr changed at 892889, ptr=00D00020
ptr changed at 896985, ptr=00C20020
ptr changed at 901081, ptr=00D00020
ptr changed at 905177, ptr=00C20020
ptr changed at 909273, ptr=00D00020
ptr changed at 913369, ptr=00C20020
ptr changed at 917465, ptr=00D00020
ptr changed at 921561, ptr=00DF0020
ptr changed at 925657, ptr=00C20020
ptr changed at 929753, ptr=00D10020
ptr changed at 933849, ptr=00C20020
ptr changed at 937945, ptr=00D10020
ptr changed at 942041, ptr=00C20020
ptr changed at 946137, ptr=00D10020
ptr changed at 950233, ptr=00C20020
ptr changed at 954329, ptr=00D10020
ptr changed at 958425, ptr=00C20020
ptr changed at 962521, ptr=00D10020
ptr changed at 966617, ptr=00C20020
ptr changed at 970713, ptr=00D10020
ptr changed at 974809, ptr=00C20020
ptr changed at 978905, ptr=00D10020
ptr changed at 983001, ptr=00E00020
ptr changed at 987097, ptr=00C20020
ptr changed at 991193, ptr=00D20020
ptr changed at 995289, ptr=00C20020
ptr changed at 999385, ptr=00D20020
ptr changed at 1003481, ptr=00C20020
ptr changed at 1007577, ptr=00D20020
ptr changed at 1011673, ptr=00C20020
ptr changed at 1015769, ptr=00D20020
ptr changed at 1019865, ptr=00C20020
ptr changed at 1023961, ptr=00D20020
ptr changed at 1028057, ptr=00C20020
ptr changed at 1032153, ptr=00D20020
ptr changed at 1036249, ptr=00C20020
ptr changed at 1040345, ptr=00D20020
ptr changed at 1044441, ptr=00C20020
ptr changed at 1048537, ptr=00D20020
ptr changed at 1052633, ptr=00E30020
ptr changed at 1056729, ptr=00C20020
ptr changed at 1060825, ptr=00D30020
ptr changed at 1064921, ptr=00C20020
ptr changed at 1069017, ptr=00D30020
ptr changed at 1073113, ptr=00C20020
ptr changed at 1077209, ptr=00D30020
ptr changed at 1081305, ptr=00C20020
ptr changed at 1085401, ptr=00D30020
ptr changed at 1089497, ptr=00C20020
ptr changed at 1093593, ptr=00D30020
ptr changed at 1097689, ptr=00C20020
ptr changed at 1101785, ptr=00D30020
ptr changed at 1105881, ptr=00C20020
ptr changed at 1109977, ptr=00D30020
ptr changed at 1114073, ptr=00E40020
ptr changed at 1118169, ptr=00C20020
ptr changed at 1122265, ptr=00D40020
ptr changed at 1126361, ptr=00C20020
ptr changed at 1130457, ptr=00D40020
ptr changed at 1134553, ptr=00C20020
ptr changed at 1138649, ptr=00D40020
ptr changed at 1142745, ptr=00C20020
ptr changed at 1146841, ptr=00D40020
ptr changed at 1150937, ptr=00C20020
ptr changed at 1155033, ptr=00D40020
ptr changed at 1159129, ptr=00C20020
ptr changed at 1163225, ptr=00D40020
ptr changed at 1167321, ptr=00C20020
ptr changed at 1171417, ptr=00D40020
ptr changed at 1175513, ptr=00C20020
ptr changed at 1179609, ptr=00D40020
ptr changed at 1183705, ptr=00E70020
ptr changed at 1187801, ptr=00C20020
ptr changed at 1191897, ptr=00D50020
ptr changed at 1195993, ptr=00C20020
ptr changed at 1200089, ptr=00D50020
ptr changed at 1204185, ptr=00C20020
ptr changed at 1208281, ptr=00D50020
ptr changed at 1212377, ptr=00C20020
ptr changed at 1216473, ptr=00D50020
ptr changed at 1220569, ptr=00C20020
ptr changed at 1224665, ptr=00D50020
ptr changed at 1228761, ptr=00C20020
ptr changed at 1232857, ptr=00D50020
ptr changed at 1236953, ptr=00C20020
ptr changed at 1241049, ptr=00D50020
ptr changed at 1245145, ptr=00E80020
ptr changed at 1249241, ptr=00C20020
ptr changed at 1253337, ptr=00D60020
ptr changed at 1257433, ptr=00C20020
ptr changed at 1261529, ptr=00D60020
ptr changed at 1265625, ptr=00C20020
ptr changed at 1269721, ptr=00D60020
ptr changed at 1273817, ptr=00C20020
ptr changed at 1277913, ptr=00D60020
ptr changed at 1282009, ptr=00C20020
ptr changed at 1286105, ptr=00D60020
ptr changed at 1290201, ptr=00C20020
ptr changed at 1294297, ptr=00D60020
ptr changed at 1298393, ptr=00C20020
ptr changed at 1302489, ptr=00D60020
ptr changed at 1306585, ptr=00C20020
ptr changed at 1310681, ptr=00D60020
ptr changed at 1314777, ptr=00EB0020
ptr changed at 1318873, ptr=00C20020
ptr changed at 1322969, ptr=00D70020
ptr changed at 1327065, ptr=00C20020
ptr changed at 1331161, ptr=00D70020
ptr changed at 1335257, ptr=00C20020
ptr changed at 1339353, ptr=00D70020
ptr changed at 1343449, ptr=00C20020
ptr changed at 1347545, ptr=00D70020
ptr changed at 1351641, ptr=00C20020
ptr changed at 1355737, ptr=00D70020
ptr changed at 1359833, ptr=00C20020
ptr changed at 1363929, ptr=00D70020
ptr changed at 1368025, ptr=00C20020
ptr changed at 1372121, ptr=00D70020
ptr changed at 1376217, ptr=00EC0020
ptr changed at 1380313, ptr=00C20020
ptr changed at 1384409, ptr=00D80020
ptr changed at 1388505, ptr=00C20020
ptr changed at 1392601, ptr=00D80020
ptr changed at 1396697, ptr=00C20020
ptr changed at 1400793, ptr=00D80020
ptr changed at 1404889, ptr=00C20020
ptr changed at 1408985, ptr=00D80020
ptr changed at 1413081, ptr=00C20020
ptr changed at 1417177, ptr=00D80020
ptr changed at 1421273, ptr=00C20020
ptr changed at 1425369, ptr=00D80020
ptr changed at 1429465, ptr=00C20020
ptr changed at 1433561, ptr=00D80020
ptr changed at 1437657, ptr=00C20020
ptr changed at 1441753, ptr=00D80020
ptr changed at 1445849, ptr=00EF0020
ptr changed at 1449945, ptr=00C20020
ptr changed at 1454041, ptr=00D90020
ptr changed at 1458137, ptr=00C20020
ptr changed at 1462233, ptr=00D90020
ptr changed at 1466329, ptr=00C20020
ptr changed at 1470425, ptr=00D90020
ptr changed at 1474521, ptr=00C20020
ptr changed at 1478617, ptr=00D90020
ptr changed at 1482713, ptr=00C20020
ptr changed at 1486809, ptr=00D90020
ptr changed at 1490905, ptr=00C20020
ptr changed at 1495001, ptr=00D90020
ptr changed at 1499097, ptr=00C20020
ptr changed at 1503193, ptr=00D90020
ptr changed at 1507289, ptr=00F00020
ptr changed at 1511385, ptr=00C20020
ptr changed at 1515481, ptr=00DA0020
ptr changed at 1519577, ptr=00C20020
ptr changed at 1523673, ptr=00DA0020
ptr changed at 1527769, ptr=00C20020
ptr changed at 1531865, ptr=00DA0020
ptr changed at 1535961, ptr=00C20020
ptr changed at 1540057, ptr=00DA0020
ptr changed at 1544153, ptr=00C20020
ptr changed at 1548249, ptr=00DA0020
ptr changed at 1552345, ptr=00C20020
ptr changed at 1556441, ptr=00DA0020
ptr changed at 1560537, ptr=00C20020
ptr changed at 1564633, ptr=00DA0020
ptr changed at 1568729, ptr=00C20020
ptr changed at 1572825, ptr=00DA0020
ptr changed at 1576921, ptr=00F30020
ptr changed at 1581017, ptr=00C20020
ptr changed at 1585113, ptr=00DB0020
ptr changed at 1589209, ptr=00C20020
ptr changed at 1593305, ptr=00DB0020
ptr changed at 1597401, ptr=00C20020
ptr changed at 1601497, ptr=00DB0020
ptr changed at 1605593, ptr=00C20020
ptr changed at 1609689, ptr=00DB0020
ptr changed at 1613785, ptr=00C20020
ptr changed at 1617881, ptr=00DB0020
ptr changed at 1621977, ptr=00C20020
ptr changed at 1626073, ptr=00DB0020
ptr changed at 1630169, ptr=00C20020
ptr changed at 1634265, ptr=00DB0020
ptr changed at 1638361, ptr=00F40020
ptr changed at 1642457, ptr=00C20020
ptr changed at 1646553, ptr=00DC0020
ptr changed at 1650649, ptr=00C20020
ptr changed at 1654745, ptr=00DC0020
ptr changed at 1658841, ptr=00C20020
ptr changed at 1662937, ptr=00DC0020
ptr changed at 1667033, ptr=00C20020
ptr changed at 1671129, ptr=00DC0020
ptr changed at 1675225, ptr=00C20020
ptr changed at 1679321, ptr=00DC0020
ptr changed at 1683417, ptr=00C20020
ptr changed at 1687513, ptr=00DC0020
ptr changed at 1691609, ptr=00C20020
ptr changed at 1695705, ptr=00DC0020
ptr changed at 1699801, ptr=00C20020
ptr changed at 1703897, ptr=00DC0020
ptr changed at 1707993, ptr=00F70020
ptr changed at 1712089, ptr=00C20020
ptr changed at 1716185, ptr=00DD0020
ptr changed at 1720281, ptr=00C20020
ptr changed at 1724377, ptr=00DD0020
ptr changed at 1728473, ptr=00C20020
ptr changed at 1732569, ptr=00DD0020
ptr changed at 1736665, ptr=00C20020
ptr changed at 1740761, ptr=00DD0020
ptr changed at 1744857, ptr=00C20020
ptr changed at 1748953, ptr=00DD0020
ptr changed at 1753049, ptr=00C20020
ptr changed at 1757145, ptr=00DD0020
ptr changed at 1761241, ptr=00C20020
ptr changed at 1765337, ptr=00DD0020
ptr changed at 1769433, ptr=00F80020
ptr changed at 1773529, ptr=00C20020
ptr changed at 1777625, ptr=00DE0020
ptr changed at 1781721, ptr=00C20020
ptr changed at 1785817, ptr=00DE0020
ptr changed at 1789913, ptr=00C20020
ptr changed at 1794009, ptr=00DE0020
ptr changed at 1798105, ptr=00C20020
ptr changed at 1802201, ptr=00DE0020
ptr changed at 1806297, ptr=00C20020
ptr changed at 1810393, ptr=00DE0020
ptr changed at 1814489, ptr=00C20020
ptr changed at 1818585, ptr=00DE0020
ptr changed at 1822681, ptr=00C20020
ptr changed at 1826777, ptr=00DE0020
ptr changed at 1830873, ptr=00C20020
ptr changed at 1834969, ptr=00DE0020
ptr changed at 1839065, ptr=00FB0020
ptr changed at 1843161, ptr=00C20020
ptr changed at 1847257, ptr=00DF0020
ptr changed at 1851353, ptr=00C20020
ptr changed at 1855449, ptr=00DF0020
ptr changed at 1859545, ptr=00C20020
ptr changed at 1863641, ptr=00DF0020
ptr changed at 1867737, ptr=00C20020
ptr changed at 1871833, ptr=00DF0020
ptr changed at 1875929, ptr=00C20020
ptr changed at 1880025, ptr=00DF0020
ptr changed at 1884121, ptr=00C20020
ptr changed at 1888217, ptr=00DF0020
ptr changed at 1892313, ptr=00C20020
ptr changed at 1896409, ptr=00DF0020
ptr changed at 1900505, ptr=00FC0020
ptr changed at 1904601, ptr=00C20020
ptr changed at 1908697, ptr=00E00020
ptr changed at 1912793, ptr=00C20020
ptr changed at 1916889, ptr=00E00020
ptr changed at 1920985, ptr=00C20020
ptr changed at 1925081, ptr=00E00020
ptr changed at 1929177, ptr=00C20020
ptr changed at 1933273, ptr=00E00020
ptr changed at 1937369, ptr=00C20020
ptr changed at 1941465, ptr=00E00020
ptr changed at 1945561, ptr=00C20020
ptr changed at 1949657, ptr=00E00020
ptr changed at 1953753, ptr=00C20020
ptr changed at 1957849, ptr=00E00020
ptr changed at 1961945, ptr=00C20020
ptr changed at 1966041, ptr=00E00020
ptr changed at 1970137, ptr=00FF0020
ptr changed at 1974233, ptr=00C20020
ptr changed at 1978329, ptr=00E10020
ptr changed at 1982425, ptr=00C20020
ptr changed at 1986521, ptr=00E10020
ptr changed at 1990617, ptr=00C20020
ptr changed at 1994713, ptr=00E10020
ptr changed at 1998809, ptr=00C20020

@p5pRT
Copy link
Author

p5pRT commented Apr 23, 2012

From @bulk88

alloctests.xs

@p5pRT
Copy link
Author

p5pRT commented Apr 23, 2012

From @bulk88

forgot to say, the reason why the Heap* test didn't move the block until
half a meg is the "process heap" isn't used by clib malloc (it creates
its own heap/memory pool) so the process heap probably (I guess, I can
"walk" using the Heap* API it if I had the time and check if its truly
empty or not) didn't have a single alloc in it. I can't explain why perl
malloc did so many moves under 250 bytes and clib malloc didn't. I might
take the c debugger through perl's malloc and see if I can spot anything
that might be causing it if I have the time.

@p5pRT
Copy link
Author

p5pRT commented Apr 23, 2012

From @bulk88

Staring at the data I generated. I'm jaw dropped. Its not that windows
doesn't leave just in case space. It moves the data back and forth
continuously between the same couple blocks. I am not an expert on
disassembly/REing of windows, but I really dont know what to do or say
at how bad the windows heap algorithm is. I dont think that this problem
(copying every page like clock work between the same 2 VM blocks) can be
solved on P5P. I haven't tried this realloc test with a stand alone C
app. I dont know if my data has anything to do with my perl being a
DEBUGGING and the -Od compiler flag some how changing the behavior of
the windows malloc system (google "debug heap") through the PE header.

@p5pRT
Copy link
Author

p5pRT commented Jul 5, 2016

@dcollinsn - Status changed from 'open' to 'stalled'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant