为什么uint8没有优化?

时间:2017-02-27 18:03:36

标签: c++ performance visual-studio

所以我一直在研究变量uint8是如何工作的,我已经意识到它实际上并不比int快!为了乘法,除法,加法或减法,程序必须将uint8转换为int,这将使其速度相同或略慢。

为什么C ++没有直接对uint8进行乘法,除法,加法或减法?

2 个答案:

答案 0 :(得分:3)

  

为什么C ++没有直接对uint8进行乘法,除法,加法或减法?

因为这样做的最佳方式是特定于平台的。

大多数CPU基于使用特定默认大小的整数值(例如32位,或64位,如16位指令所示为here)将这些操作作为汇编指令提供,它们可能有也可能没有这样的指令对于uint8值 通常针对CPU的缓存衬里机制优化位大小。

因此,最佳实现取决于可用的目标CPU指令,并且不能被C ++标准涵盖。

答案 1 :(得分:1)

我不确定编译器在执行时是否会为uint8_t产生8位算术运算(不太可能更快)。

@harold提到,我之前所说的现在不是那么现代......对于8位操作,部分寄存器更新问题现在不再那么严重了。所以,大多数8位操作并不快。虽然8位分区的速度要快一些,但我还是想弄清楚为什么MS的编译器不会使用它。 (不太确定:由于部分更新问题大部分已经完全消除,甚至没有被AMD保留,因此8bit部门的一个周期优势不值得被滥用)。

原件: 在现代x86处理器上,8位操作面临一个名为partial register update的问题,您只需更改完整寄存器的一部分,这会导致false dependency严重影响性能。

和FYI一样,在语言层面上,C ++中没有小于int的整数类型的算术。有usual arithmetic promotion提升类型。