C++(VS2022)关键字在不同使用方式下的速度对比

C++(VS2022)关键字在不同使用方式下的速度对比,第1张

说明
  • 计时单位:纳秒。
  • 耗时:测试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中变量反复创建带来的消耗。

从栈的使用方式来看,事先声明反而更慢也是必然情况。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/755956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-30
下一篇 2022-04-30

发表评论

登录后才能评论

评论列表(0条)

保存