- 计时单位:纳秒。
- 耗时:测试20次,最快和最慢各删去5次,剩余10次的平均值,即为耗时。
有两种取余方法:
// 方法一:使用%运算符。
// 耗时:403566930。
for (size_t i = 0; i < 100000000; i++)
{
b = a % 10;
}
// 方法二:使用其他运算得出余数。
// 耗时:402652720。
for (size_t i = 0; i < 100000000; i++)
{
b = a - a / 10 * 10;
}
可见%的class="superseo">速度远慢于-、*、/。
方法二中最耗时的是整除运算,若正好在之前已经需要计算出a / 10
的值,那么该方法快三倍以上:
// 耗时:149291310
c = a / 10;
for (size_t i = 0; i < 100000000; i++)
{
b = a - c * 10;
}
事先声明for中用于循环的变量会更快?
// 耗时:849495160。
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;
}
}
}
// 耗时:836897390。
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;
}
}
}
// 耗时:840018680。
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
中变量反复创建带来的消耗。
从栈的使用方式来看,事先声明反而更慢也是必然情况。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)