假设我在C中有一个包含5个元素的数组,这些元素在[0..255]范围内保存整数,使用unsigned char
,unsigned int
或int
通常会更好吗?关于表现?因为char只有一个字节,但据我所知,int更容易为处理器处理。或者它主要取决于如何访问元素?
编辑:测量非常困难,因为代码属于库,而数组是外部访问的。
另外,我不仅在这种情况下遇到这个问题,所以我要求更一般的答案
答案 0 :(得分:1)
虽然答案真的取决于CPU以及它如何处理加载存储小整数的问题,但你可以假设在大多数现代系统中字节数组会更快:
char
仅占int
所占空间的1/4(在大多数系统上),这意味着在char
数组上工作仅占用内存的四分之一带宽。大多数代码都是现代硬件上的内存限制。
答案 1 :(得分:0)
这个很难回答,因为它取决于代码,编译器和处理器。
但是,有一项建议是使用uint8_t
unsigned char
。 (代码将是相同的,但显式版本更好地传达了意义。)
然后还有一件事需要考虑。最好将四个8位整数打包成一个32位整数。只要没有溢出,大多数算术和按位逻辑运算都可以正常工作(除法是值得注意的例外)。
答案 2 :(得分:0)
黄金法则:衡量它。如果你不能测量它,那么它就不值得优化。因此,以一种方式测量它,改变它,以另一种方式测量它,采取更快的速度。请注意,当您切换到其他编译器或其他处理器(如2015年或2016年引入的处理器)时,其他代码现在可能会更快。
或者,不要测量它,但要编写最易读和可维护的代码。
考虑使用单个64位整数和移位操作: - )