所以我一直在研究变量uint8是如何工作的,我已经意识到它实际上并不比int快!为了乘法,除法,加法或减法,程序必须将uint8转换为int,这将使其速度相同或略慢。
为什么C ++没有直接对uint8进行乘法,除法,加法或减法?
答案 0 :(得分:3)
为什么C ++没有直接对uint8进行乘法,除法,加法或减法?
因为这样做的最佳方式是特定于平台的。
大多数CPU基于使用特定默认大小的整数值(例如32位,或64位,如16位指令所示为here)将这些操作作为汇编指令提供,它们可能有也可能没有这样的指令对于uint8
值
通常针对CPU的缓存衬里机制优化位大小。
因此,最佳实现取决于可用的目标CPU指令,并且不能被C ++标准涵盖。
答案 1 :(得分:1)
我不确定编译器在执行时是否会为uint8_t产生8位算术运算(不太可能更快)。
原件:
在现代x86处理器上,8位操作面临一个名为partial register update
的问题,您只需更改完整寄存器的一部分,这会导致false dependency
严重影响性能。
和FYI一样,在语言层面上,C ++中没有小于int的整数类型的算术。有usual arithmetic promotion
提升类型。