Mam cyklus, ktery nacita soubor a postupne z nej vytahuje bit po bitu a uklada zpet. Kdyz hlavni cast vytahnu do funkce, tak se to cele zpomaly z 1.75s na 4.3s. Co s tim? Proc se to prepsanim na funkci tak drasticky zpomali?
Ta cast se souborem neni podstatna, v $data1 je postupne 38.000 nejakych znaku ziskanych pomoci fread ze souboru o velikosti 100k
...
$data1 = unpack("C*",$data1); //convert file string to byte(integer) array - coz je rychlejsi nez pres ord()
$data2 = "";
//$fname = 'xor_eb';
for ($i=1;$i<=$len;$i++)
{
$x = $data1[$i];
$y = 0x00;
for ($j=0;$j<8;$j++)
{
$b = ($x>>$j) & 0x01;
$f = ($e ^ ~$b) & 0x01; //xor
$e = $f;
$y |= $f<<$j; //or
$stat[0] += $b; // count 1 input
$stat[1] += $f; // count 1 output
...
-- s funkci --
...
$data1 = unpack("C*",$data1); //convert file string to byte array
$data2 = "";
for ($i=1;$i<=$len;$i++)
{
// $x = ord($data1[$i]);
$x = $data1[$i];
$y = 0x00;
for ($j=0;$j<8;$j++)
{
xor_eb($x,$y,$j,$a,$b,$e,$f,$stat);
}
...
function xor_eb(&$x,&$y,&$j,&$a,&$b,&$e,&$f,&$stat)
{
$b = ($x>>$j) & 0x01;
$f = ($e ^ ~$b) & 0x01; //xor
$e = $f;
$y |= $f<<$j; //or
$stat[0] += $b; // count 1 input
$stat[1] += $f; // count 1 output
}