C++ - 最快的整数类型?

NFR*_*RCR 4 c++ performance

我正在对算法进行基准测试,没有必要知道细节.主要组件是缓冲区(整数的原始数组)和索引器(整数 - 用于访问缓冲区中的元素).

缓冲区的最快类型似乎是unsigned char,以及short,int,long的有符号和无符号版本.但是char/signed char更慢.差异:1.07倍.

对于索引器,有符号和无符号类型之间没有区别.然而,int和long比char和short快1.21倍.

在考虑性能而不是内存消耗时,是否应该默认使用某种类型?

注意:缓冲区元素和索引器上使用的操作是赋值,递增,递减和比较.

Mar*_*ett 7

通常,最大的胜利来自缓存.

如果您的数据值足够小以使它们适合8位,那么您可以在CPU缓存中容纳比使用整数和浪费3个字节/值时更多的数据.如果您正在处理数据块,则可以获得缓存命中的巨大速度优势.

索引的类型不太重要,只要它适合CPU寄存器(即不尝试使用long long8位CPU)它将具有相同的速度

编辑:值得一提的是,测量速度很棘手.您需要多次运行算法以允许缓存,您需要查看CPU上正在运行的其他内容,甚至是其他硬件可能正在中断的内容.除非您非常小心,否则10%的速度差异可能被视为噪音.