什么C ++类型用于最快“循环”?

时间:2012-09-09 09:41:29

标签: c++ performance types for-loop

我认为这个网站尚未得到解答。

我制作了一个代码,它经历了4个数字的许多组合。数值从0到51,所以它们可以存储在6位中,所以在1个字节中,我是对的吗?我在嵌套循环中使用这4个数字,然后在最低级别循环使用它们。那么那些可以存储至少52个值的c ++类型最快可以迭代4个嵌套的循环吗?

The code looks like: 
for(type first = 0; first != 49; ++first)
 for(type second = first+1; second != 50; ++second)
  for(type third = second+1; third != 51; ++third)
   for(type fourth = third+1; fourth != 52; ++fourth) {
    //using those values for about 1 bilion bit operations made in another for cycles 
   }

该代码非常简单,也许还有更好的方法进行这种迭代,你也可以帮助我。

3 个答案:

答案 0 :(得分:1)

使用标题std::uint_fast8_t中的typedef <cstdint>。它应该是“最快”的无符号整数类型,至少有8位。

答案 1 :(得分:0)

最快的是底层处理器ALU本身可以使用的任何东西。现在寄存器可以以多种格式寻址。在这种情况下,所有这些格式同样快。

因此,这成为特定于处理器体系结构而非C ++特定的。 如果您正在使用现代PC处理器,那么int对于for循环来说就像其他任何东西一样快。

在嵌入式系统上,还有更多需要考虑的事项。例如。变量是否存储在对齐位置?

答案 2 :(得分:0)

在大多数机器上,int是最快的整数类型。在我使用的所有计算机上,intunsigned快,明显快于signed char

另一个问题,也许是一个更大的问题,就是你在用这些数字做的事情。你没有显示代码,所以没有办法说明。如果您希望int生成预期的整数值,请使用first*second

另一个问题是您希望此代码具有多大的便携性。将被移植到许多不同架构的代码,不同的编译器与将在有限和受控设置中使用的代码之间存在巨大差异。如果是后者,请编写一些基准测试,并使用基准测试最佳的类型。如果你正在写一些广泛消费的东西,问题会更加困难。