说明
- 计时单位:纳秒。
- 耗时:测试20次,最快和最慢各删去5次,剩余10次的平均值,即为耗时。
取余运算(%)很慢?
有两种取余方法:
for (size_t i = 0; i < 100000000; i++)
{
b = a % 10;
}
for (size_t i = 0; i < 100000000; i++)
{
b = a - a / 10 * 10;
}
可见%的速度远慢于-、*、/。
方法二中最耗时的是整除运算,若正好在之前已经需要计算出a / 10 的值,那么该方法快三倍以上:
c = a / 10;
for (size_t i = 0; i < 100000000; i++)
{
b = a - c * 10;
}
事先声明for中用于循环的变量会更快?
streamoff i, j, k;
long a, b;
for (i = 0; i < 1000; i++)
{
for (j = 0; j < 1000; j++)
{
for (k = 0; k < 1000; k++)
{
a = 7;
b = a + 2;
}
}
}
long a, b;
for (streamoff i = 0; i < 1000; i++)
{
for (streamoff j = 0; j < 1000; j++)
{
for (streamoff k = 0; k < 1000; k++)
{
a = 7;
b = a + 2;
}
}
}
streamoff i, j, k;
for (i = 0; i < 1000; i++)
{
for (j = 0; j < 1000; j++)
{
for (k = 0; k < 1000; k++)
{
long a, b;
a = 7;
b = a + 2;
}
}
}
可见,完全不用担心for 中变量反复创建带来的消耗。
从栈的使用方式来看,事先声明反而更慢也是必然情况。
|