gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:18:07 31 4
gpt4 key购买 nike

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

“最快”或“最小”的客观含义是什么?举个例子说明这是有利的甚至是必要的?

最佳答案

“最快”没有客观意义;它基本上是编译器作者的判断调用。通常,这意味着将较小的值扩展到架构的 native 寄存器宽度,但这并不总是最快(例如,如果它是 8 位值,则 10 亿个条目的数组可能会处理得更快,但是 uint_fast8_t 可能是一个 32 位值,因为对于该大小,CPU 寄存器操作速度更快)。

“最小”通常 表示“与请求的位大小相同”,但在具有有限大小值可供选择的怪异架构上(例如,旧的 Crays 拥有一切一个 64 位类型),int_least16_t 会工作(并无缝地变成一个 64 位值),而编译器可能会在 int16_t 上出错(因为不可能使一个真正的那里有 16 位整数值)。

要点是,如果您依赖于溢出行为,则需要使用完全固定宽度的类型。否则,您可能应该默认使用 least 类型以获得最大的可移植性,在热代码路径中切换到 fast 类型,但需要进行分析以确定它是否真的有任何区别。

关于c++ - 在 C++11 中利用 int*_t、int_fast*_t 和 int_least*_t 之间的差异的一个很好的例子是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52606243/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com