我最近发现存在标准的最快类型,主要是int_fast32_t和int_fast64_t.
我总是被告知,对于主流架构的正常使用,应该更好地使用经典的int和long,它应该总是适合处理器的默认读取容量,因此避免无用的数字转换.
在C99标准中,它在§7.18.1.3p2中说:
"typedef名称int_fastN_t指定宽度至少为N的最快有符号整数类型.typedef名称uint_fastN_t指定宽度至少为N的最快无符号整数类型."
在§7.18.1.3p1中也引用了它:
"对于所有目的,指定的类型不能保证最快;如果实现没有明确的理由选择一种类型而不是另一种类型,它将简单地选择一些满足签名和宽度要求的整数类型."
我不清楚最快的真正含义.我不明白何时应该使用这种类型,何时不应该使用.
我用Google搜索上这一点了,发现了一些开放 源码 项目已经改变了他们的一些功能,但不是所有的人.他们并没有真正解释为什么他们改变了代码的一部分,而只改变了代码的一部分.
当int_fastXX_t 真的比经典的更快时,你知道具体的案例/用法是什么吗?
我已经了解到,在 x86-64 平台上使用任何 64 位寄存器都需要一个REX前缀,而任何小于 64 位的地址都需要一个地址大小前缀。
在 x86-64 位上:
E3rel8 是jrcxz
67 E3rel8 是jecxz
67是地址大小覆盖前缀的操作码。
sizeof(int_fast8_t)是 8 位,而其他sizeof(int_fast16_t)和sizeof(int_fast32_t)(仅在 Linux 上)是 64 位。
为什么其他快速类型定义是 64 位而只有int_fast8_t8 位?
和对齐有关系吗?