相关疑难解决方法(0)

intXX_t和int_fastXX_t有什么区别?

我最近发现存在标准的最快类型,主要是int_fast32_tint_fast64_t.

我总是被告知,对于主流架构的正常使用,应该更好地使用经典的intlong,它应该总是适合处理器的默认读取容量,因此避免无用的数字转换.

在C99标准中,它在§7.18.1.3p2中说:

"typedef名称int_fastN_t指定宽度至少为N的最快有符号整数类型.typedef名称uint_fastN_t指定宽度至少为N的最快无符号整数类型."

在§7.18.1.3p1中也引用了它:

"对于所有目的,指定的类型不能保证最快;如果实现没有明确的理由选择一种类型而不是另一种类型,它将简单地选择一些满足签名和宽度要求的整数类型."

我不清楚最快的真正含义.我不明白何时应该使用这种类型,何时不应该使用.

我用Google搜索上这一点了,发现了一些开放 源码 项目已经改变了他们的一些功能,但不是所有的人.他们并没有真正解释为什么他们改变了代码的一部分,而改变了代码的一部分.

当int_fastXX_t 真的比经典的更快时,你知道具体的案例/用法是什么吗?

c optimization types integer c99

48
推荐指数
2
解决办法
2667
查看次数

x86-64 平台上的 int_fast8_t 大小与 int_fast16_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 位?

和对齐有关系吗?

c 64-bit assembly x86-64 low-level

3
推荐指数
1
解决办法
232
查看次数

标签 统计

c ×2

64-bit ×1

assembly ×1

c99 ×1

integer ×1

low-level ×1

optimization ×1

types ×1

x86-64 ×1