2012-07-25 47 views
0

可能重复:
int_least64_t vs int_fast64_t vs int64_t什么是stdint.h中描述的“快速类型”?

例如,什么是以下类型的,为什么/何时使用它们之间的区别?

  • int64_t
  • int_least64_t
  • int_fast64_t
+1

您是否尝试过Google搜索?你发现了什么? – YePhIcK 2012-07-25 12:13:47

+0

@YePhIcK:是的我使用谷歌搜索,但最后我更喜欢这里给出的回复 – Destroyica 2012-07-25 12:19:43

+1

@Destroyica:YePhIcK给出的链接*回答你的问题,而不需要再次输入。 (幸运的是,如果我知道答案,我先输入,然后再搜索。对于你这样做的问题,应该是相反的。) – DevSolar 2012-07-25 12:30:13

回答

5

int64_t的一种类型 64位宽度,二进制补码表示,并且没有填充位。这是有用的,例如在二进制界面中工作;它的存在是可选,仅在具有具有的整数类型的架构上定义。

int_least64_t是最小可能的类型至少 64位宽度,带有实现定义的表示形式和填充。如果64位宽度不可用,则可能更宽。适用于需要特定最小值范围的算法。

int_fast64_t是一种至少为64位宽度的类型。如果CPU能够更高效地处理更宽泛的类型,那么它可能更宽一些,交换内存占用空间以提高速度。

第一个是非常具体的。如果底层硬件很棘手,另外两个给编译器一些摆动空间,即告诉编译器在什么情况下你会接受比请求更宽的类型。

+0

也许值得注意的是'intN_t'必须是二进制补码,并且没有填充位。 – 2012-07-25 12:35:15

+0

@DanielFischer:...并且是可选的,是的。具有这种类型的平台应该定义这些类型,但是平台可能没有这些类型,不定义这些类型,并且仍然完全符合。 (也就是说,一个使用例如补码的平台,它的short,int,long等可能没有定义任何intN_t类型,但仍然完全符合。) – DevSolar 2012-07-25 12:45:28

+0

好点,可选性,特别是因为最小和快速是必需的标准宽度8/16/32/64。 – 2012-07-25 12:48:08

1

他们是类型设计为容纳他们说的位,但对于CPU架构进行了优化。

这意味着在64位机器上,fast16_t可能是64位大小;它不应该依赖于实际的字体大小,例如如果你写一个结构到磁盘。为此使用“正常”类型。