On 2/5/19 8:34 PM, ToddAndMargo via perl6-users wrote:

On Sun, Feb 3, 2019 at 9:36 PM ToddAndMargo via perl6-users <perl6-users@perl.org <mailto:perl6-users@perl.org>> wrote:

    Hi All,

    If I have a variable of type Buf which 10000000 bytes in it
    and I find the five bytes I want, is it faster, slower,
    or no difference in speed to overwrite the same variable
    with the five bytes?  Or is it faster to put the five bytes
    from the first variable into a second variable?

    Many thanks,

On 2/5/19 8:42 AM, yary wrote:
There are modules to time two pieces of code and show the difference

You can write up the two versions you're thinking of, feed them to the benchmark module, and show us what you find!


Hi Yary,

Thank you!

Apparently, overwriting the original buffer only change the
structures pointers, which is almost instantaneous.

And you taught me something new today!


<code VarTest.pl6>

#!/usr/bin/env perl6

use Bench;

my IO::Handle $HaystackHandle = open( "/home/temp/procexp64.exe", :bin, :ro );
my Buf $Haystack              = $HaystackHandle.read( 3000000 );

my Buf $Needle;

my $b = Bench.new;

sub Another() { $Needle   = $Haystack.subbuf( 0x14FFAC .. 0x145FAC ); }
sub Same()    { $Haystack = $Haystack.subbuf( 0x14FFAC .. 0x145FAC ); }

say "first copies to a new variable; second overwrites the same variable";
$b.timethese( 100000, {
   first  => sub { Another; },
   second => sub { Same; },

</code VarTest.pl6>

$ VarTest.pl6
first copies to a new variable; second overwrites the same variable
Timing 100000 iterations of first, second...
     first: 0.021 wallclock secs (0.021 usr 0.000 sys 0.021 cpu) @ 4676612.262/s (n=100000)
     second: 0.000 wallclock secs (0.000 usr 0.000 sys 0.000 cpu)

You guys catch my mistake?  It is only valid for one iteration.
Chuckle.  A rewrite is in order.

Reply via email to