我一直在对算法进行基准测试,没有必要知道细节。主要组件是缓冲区(原始整数数组)和索引器(整数 - 用于访问缓冲区中的元素)。
缓冲区最快的类型似乎是 unsigned char,以及 short、int、long 的有符号和无符号版本。但是 char/signed char 速度较慢。差异:1.07 倍。
对于索引器,有符号和无符号类型之间没有区别。然而,int 和 long 比 char 和 short 快 1.21 倍。
在考虑性能而不是内存消耗时,是否应该默认使用一种类型?
注意:对缓冲区和索引器的元素使用的操作是赋值、递增、递减和比较。
最佳答案
通常最大的胜利来自缓存。
如果您的数据值足够小以适合 8 位,那么与使用整数并浪费 3 个字节/值相比,您可以在 CPU 缓存中容纳更多数据。如果您正在处理一个数据 block ,您将在缓存命中方面获得巨大的速度优势。
索引的类型不太重要,只要它适合 CPU 寄存器(即不要尝试在 8 位 CPU 上使用 long long
),它会有相同的速度
编辑:还值得一提的是,测量速度很棘手。您需要多次运行该算法以允许缓存,您需要观察 CPU 上还有什么在运行,甚至还有哪些其他硬件可能正在中断。除非您非常小心,否则 10% 的速度差异可能会被视为噪音。
关于C++——最快的整数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10015715/