在不同位度平台上int_fastN_t的正确位大小是多少?
What's the proper bitsize for int_fastN_t on different bitness platforms?
,stdint.h
分别按int_leastN_t
和int_fastN_t
为某些N位类型提供了数据和代码经济变体。我想它考虑到word
不同 CPU 的大小。
话虽如此,据我所知,64 位 CPU 处理 64 位数据的速度比低位数据快,无论"更少"是什么。从逻辑上讲,64 位整数比 32 位快,当涉及到 64 位 CPU 时,尽可能快地使用 16 位数据,int_fast16_t
INT_FAST16_MIN
定义为 INT64_MIN
而不是 stdint.h
中指定的INT32_MIN
。
对于 32 位 CPU 来说,类似的情况int_fast8_t
,但问题是char
正好是 8 位,无论如何,所以不可能有最低版本。
我知道当前的规范必须同时容纳 64 位和 32 位处理器,但从理论上讲,从 64 位 pov 开始,我的说法是否正确?
不,除了它们必须至少N
位宽的明显要求之外,没有一般的理论基础来确定应该如何定义[u]int_fastN_t
。
对于"32位"或"64位"CPU是什么,实际上没有确切的定义。该数字可能指通用 CPU 寄存器的大小、地址的大小、某些内部总线的宽度或营销部门的心血来潮。有许多CPU的"位数"一直很模糊;某些 CPU 在某些方面是 8 位的,在其他方面是 16 位的,或者 16 位和 32 位。有关示例,请参阅 x86 和 68k CPU 系列的演变。
完全有可能拥有一个具有 64 位通用寄存器的 CPU,该寄存器还具有比 64 位算术更快地执行 32 位算术的指令。就此而言,64 位加法可能比 32 位加法快,32 位除法可能比 64 位除法快。
就我个人而言,我满足于让编译器和运行时库实现者担心它,并以最合理的方式为目标体系结构定义[u]intfastN_t
类型。如果我需要在运行时知道实际大小,则始终有sizeof
运算符。如果我在编写代码时需要知道实际大小,我可能不应该首先使用[u]int_fastN_t
。
以下是 C 标准对[u]int_leastN_t
类型的说明 (N1570 7.20.1.3:
以下每种类型都指定一个整数类型,该类型通常为 在所有整数类型中操作速度最快,这些整数类型至少具有 指定宽度。
typedef 名称
int_fastN_t
指定最快的有符号整数 宽度至少为N
的类型。typedef 名称uint_fastN_t
指定宽度至少为N
.需要以下类型:
int_fast8_t
uint_fast8_t
int_fast16_t
uint_fast16_t
int_fast32_t
uint_fast32_t
int_fast64_t
uint_fast64_t
此表单的所有其他类型的都是可选的。
C标准提供了唯一的保证;除此之外的任何内容都是不可移植的。
- 复制列表初始化的隐式转换的等级是多少
- while循环中while循环的时间复杂度是多少
- 如何检查一个c++字符串中有多少相同的字符/数字
- C++有多少类型的循环
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- 在条件变量中触发错误信号的频率是多少
- 函数的时间复杂度是多少?
- 必须为 C++20 协程帧保留多少内存?
- 对于四轴飞行器,PID中I控制器的理想值应该是多少
- C++,数组有多少个地址?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 在 Linux 中存储区域设置名称的缓冲区大小应该是多少?
- 在内存不足之前,我可以声明多少个 const 变量?
- 可以读入进程内存的最大块大小是多少?
- 如何在不知道C++中有多少可选参数的情况下在循环中使用va_arg?
- 在二维向量或数组中可以存储的最大元素数是多少?
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 计算出有多少客户端可以连接到我正在使用的一些tcp服务器代码
- 如果我不知道每个列表中有多少个数字,我如何将给定数量的数字列表作为输入?
- C++中 std::map 的运行时复杂度是多少?