在声明计数器时比较 uint8_t 与 uint16_t
假设有一个从 0 到 100 计数的计数器,将计数器变量声明为uint16_t而不是uint8_t.
显然,如果我使用uint8_t我可以节省一些空间。在自然字长为 16 位的处理器上,我猜两者的访问时间是一样的。我想不出为什么我会使用uint16_tifuint8_t可以覆盖范围。
回答
使用比所需更宽的类型可以让编译器避免屏蔽较高位。
假设您在 16 位架构上工作,那么使用uint16_t可能会更有效,但是如果您使用uint16_t而不是uint8_t在 32 位架构上,那么您仍然会有掩码指令,但只是掩码不同数量的位。
以跨平台可移植方式使用的最有效的类型就是普通的intor unsigned int,它总是正确的类型,以避免需要屏蔽指令,并且总是能够容纳多达 100 的数字。
如果您处于禁止使用本机类型的 MISRA 或类似受监管环境中,则要使用的正确的符合标准的类型是uint_fast8_t. 这保证是最快的无符号整数类型,至少有 8 位。
然而,这一切真的是无稽之谈。编写代码的主要目标应该是使其可读,而不是使其尽可能快。像这样的吝啬指令使代码变得复杂并且更容易出现错误。也因为它更难阅读,所以在代码审查期间不太可能发现错误。
一旦代码完成并且您已经对其进行了测试并找到了瓶颈的特定部分,您应该只尝试这样优化。屏蔽循环计数器不太可能成为任何实际代码中的瓶颈。