根据在线文档,这些固定宽度整数类型之间存在差异。对于int*_t
,我们将宽度固定为*
的值。但是对于其他两种类型,在描述中使用形容词 fastest 和 smallest 来请求基础数据模型提供的最快或最小的实例。
“最快”或“最小”的客观含义是什么?有什么优势或什至必要的例子?
答案 0 :(得分:2)
“最快”没有客观含义;这基本上是编译器编写者的判断调用。通常,这意味着将较小的值扩展到体系结构的本机寄存器宽度,但这并不是总是最快的(例如,如果10亿个入口数组是8位值,则处理速度可能更快,但是{{ 1}}可能是32位值,因为该大小的CPU寄存器操作速度更快。
“最小” 通常的意思是“与请求的位大小相同”,但是在奇怪的体系结构中,尺寸值可供选择(例如,旧的Crays具有 everything 64位类型),uint_fast8_t
就可以工作(并无缝地变成64位值),而编译器可能会在int_least16_t
上出错(因为不可能在那里生成真实的16位整数值)
要点是,如果您要依靠溢出行为,则需要使用精确的固定宽度类型。否则,您可能应该默认使用int16_t
类型以获得最大的可移植性,并在热代码路径中切换到least
类型,但是需要进行分析以确定它是否真正起作用。