利用C ++ 11中的int * _t,int_fast * _t和int_least * _t之间的差异的一个好例子是什么?

时间:2018-10-02 10:10:17

标签: c++ c++11 integer fixed-width cstdint

根据在线文档,这些固定宽度整数类型之间存在差异。对于int*_t,我们将宽度固定为*的值。但是对于其他两种类型,在描述中使用形容词 fastest smallest 来请求基础数据模型提供的最快或最小的实例。

“最快”或“最小”的客观含义是什么?有什么优势或什至必要的例子?

1 个答案:

答案 0 :(得分:2)

“最快”没有客观含义;这基本上是编译器编写者的判断调用。通常,这意味着将较小的值扩展到体系结构的本机寄存器宽度,但这并不是总是最快的(例如,如果10亿个入口数组是8位值,则处理速度可能更快,但是{{ 1}}可能是32位值,因为该大小的CPU寄存器操作速度更快。

“最小” 通常的意思是“与请求的位大小相同”,但是在奇怪的体系结构中,尺寸值可供选择(例如,旧的Crays具有 everything 64位类型),uint_fast8_t就可以工作(并无缝地变成64位值),而编译器可能会在int_least16_t上出错(因为不可能在那里生成真实的16位整数值)

要点是,如果您要依靠溢出行为,则需要使用精确的固定宽度类型。否则,您可能应该默认使用int16_t类型以获得最大的可移植性,并在热代码路径中切换到least类型,但是需要进行分析以确定它是否真正起作用。