使用(4字节)"int"表示数字与使用4元素无符号字符数组表示数字之间是否存在性能差异



假设C++中的int由4个字节表示,而unsigned char由1个字节表示时,您可以用4个元素的unsigned char数组来表示int,对吗?

我的问题是,用unsigned char数组表示一个数字有什么性能上的缺点吗?比如,如果你想把两个数字加在一起,那么与添加数组中的每个元素和手动处理进位相比,int + int的速度会一样快吗?

这只是我尝试用字节进行实验和实践,而不是一些实际的应用程序。

使用4字节数组进行任何类型的操作都会有许多性能方面的缺点。例如,以简单加法为例:现在几乎任何CPU都会有一条指令,在一个(可能是两个(CPU周期内添加两个32位整数。要用4字节数组模拟它,您需要至少4条独立的CPU指令。

此外,许多CPU在处理32位或64位数据时实际上比在处理8位数据时工作得更快,因为它们的内部寄存器针对32位和64位操作数进行了优化。

让我们放大你的问题。两个16字节变量的单次添加与4字节变量的四次单独添加之间是否存在性能差异?向量寄存器和向量指令(MMX、SSE、AVX(的概念也随之而来。基本上是一样的,SIMD总是更快,因为执行的指令实际上更少,整个操作都是由专用硬件完成的。除此之外,在你的问题中,你还必须考虑到现代CPU不使用1字节的变量,相反,它们仍然同时处理32或64位。因此,您将使用4字节寄存器进行4次单独的加法运算,每次只使用一个较低字节,然后手动处理进位位。是的,那会很慢。

最新更新