jrh*_*ath 35 optimization performance refactoring
我正在做一些编码,我必须编写这种代码:
if( array[i]==false )
array[i]=true;
Run Code Online (Sandbox Code Playgroud)
我想知道它是否应该重写为
array[i]=true;
Run Code Online (Sandbox Code Playgroud)
这就提出了一个问题:比例分配的速度快吗?
从语言到语言的差异怎么样?(例如java和cpp之间的对比)
注意:我听说"过早优化是所有邪恶的根源." 我不认为这适用于:)
sha*_*oth 19
好吧,因为你说你确定这很重要,你应该写一个测试程序和测量来找到差异.
如果在内存中分散的地址分配的多个变量上执行此代码,则比较可以更快.通过比较,您只会将内存中的数据读取到处理器缓存中,如果在缓存决定刷新行时不更改变量值,则会看到该行未更改且无需将其写回记忆.这可以加快执行速度.
Oli*_*Oli 15
编辑:我用PHP编写了一个脚本.我只是注意到它有一个明显的错误,这意味着最好的情况运行时计算不正确(可怕没人注意到!)
最好的情况只是击败彻底的任务,但最坏的情况比普通的任务更糟糕.就实际数据而言,分配可能是最快的.
输出:
码:
<?php
$arr = array();
$mtime = explode(" ", microtime());
$starttime = $mtime[1] + $mtime[0];
reset_arr($arr);
for ($i=0;$i<10000;$i++)
$arr[i] = true;
$mtime = explode(" ", microtime());
$firsttime = $mtime[1] + $mtime[0];
$totaltime = ($firsttime - $starttime);
echo "assignment in ".$totaltime." seconds<br />";
reset_arr($arr);
for ($i=0;$i<10000;$i++)
if ($arr[i])
$arr[i] = true;
$mtime = explode(" ", microtime());
$secondtime = $mtime[1] + $mtime[0];
$totaltime = ($secondtime - $firsttime);
echo "worst case comparison in ".$totaltime." seconds<br />";
reset_arr($arr);
for ($i=0;$i<10000;$i++)
if (!$arr[i])
$arr[i] = false;
$mtime = explode(" ", microtime());
$thirdtime = $mtime[1] + $mtime[0];
$totaltime = ($thirdtime - $secondtime);
echo "best case comparison in ".$totaltime." seconds<br />";
function reset_arr($arr) {
for ($i=0;$i<10000;$i++)
$arr[$i] = false;
}
Run Code Online (Sandbox Code Playgroud)