在数组中使用int或char?

时间:2014-08-09 15:25:16

标签: c performance struct char int

假设我在C中有一个包含5个元素的数组,这些元素在[0..255]范围内保存整数,使用unsigned charunsigned intint通常会更好吗?关于表现?因为char只有一个字节,但据我所知,int更容易为处理器处理。或者它主要取决于如何访问元素?

编辑:测量非常困难,因为代码属于库,而数组是外部访问的。

另外,我不仅在这种情况下遇到这个问题,所以我要求更一般的答案

3 个答案:

答案 0 :(得分:1)

虽然答案真的取决于CPU以及它如何处理加载存储小整数的问题,但你可以假设在大多数现代系统中字节数组会更快:

char仅占int所占空间的1/4(在大多数系统上),这意味着在char数组上工作仅占用内存的四分之一带宽。大多数代码都是现代硬件上的内存限制。

答案 1 :(得分:0)

这个很难回答,因为它取决于代码,编译器和处理器。

但是,有一项建议是使用uint8_t unsigned char。 (代码将是相同的,但显式版本更好地传达了意义。)

然后还有一件事需要考虑。最好将四个8位整数打包成一个32位整数。只要没有溢出,大多数算术和按位逻辑运算都可以正常工作(除法是值得注意的例外)。

答案 2 :(得分:0)

黄金法则:衡量它。如果你不能测量它,那么它就不值得优化。因此,以一种方式测量它,改变它,以另一种方式测量它,采取更快的速度。请注意,当您切换到其他编译器或其他处理器(如2015年或2016年引入的处理器)时,其他代码现在可能会更快。

或者,不要测量它,但要编写最易读和可维护的代码。

考虑使用单个64位整数和移位操作: - )