I have a couple thoughts...

1) In some other languages, passing an array by value only passes the first
element value, not the whole array.  This may be happening here, which would
explay the fast execution times.  I don't know this for sure, but it could
easily be tested by seeing what's in $a inside the function f().

2) Try returning the array by reference...

function &f(&$a){return $a;}

for ($i=0; $i < 100; $i++){$a = & f($big);}

---
Seairth Jacobs
[EMAIL PROTECTED]


"Markas" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> I tried some trivial expirements:
>
> /* here I define an array $big, which I guess would "eat" ~100kb of memory
> */
> for($i=0; $i<10000; $i++)
> {
>  $big[$i] = "1234567890";
> }
>
> /* this func only returns the value it gets as a param...*/
> function f($a){return $a;}
>
> $start = microtime();
>
> /* here all the job is done */
> for ($i=0; $i < 100; $i++){$a = f($big);} /* <--- every iteration I just
> pass $big array to this func and it simply returns it*/
>
> $end = microtime();
>
> /* here I find out the time the job above takes to run, similar to the
code
> from the help:*/
> function
> microtime($time){
>     list($usec, $sec) = explode(" ",$time);
>     return ((float)$usec + (float)$sec);
>     }
>
> $time_start = getmicrotime($start);
> $time_end = getmicrotime($end);
> $time = $time_end - $time_start;
>
> echo "Did nothing in $time seconds";
>
> So the script above takes on my server ~0.00115 sec, so as far as I
understand, it takes php to copy that $big array which is rather large, at
least 100 times... So I decided to change the function f($a):
>  function f($a){return $a;} changed to  function f(&$a){return $a;},
> as you can see, I only wanted to pass that $a param by reference, without
copying it, so I thought I win in performance and the 100 iterations will
work faster, as no copying of such a large array $big (which is this time
going to be passed by refernce) will be involved,... BUT this case the job
took ~3.75093 seconds, which is  3262 times SLOWER !!! I also found out,
that while using refernces, the time of job's run strictly depends on the
$big array dimension, and while NOT using references, the time doesn't
depend on that, but I thought just on the contrary. I thought, that while
using references, we dont copy the data and therefore do not depend on that
data amount, but the example above shows just the opposite results...
>
> What's going on,  if anybody gets interested, please explain?
>
>
>
>
>
>
>



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to