21

我有几个问题:

  1. 我是否需要 64 位处理器才能使用 64 位数据类型(__int64 或 int64_t)?

  2. int64_t 的“t”是什么意思?

  3. 从哪个版本的 GCC 和 VCC 开始支持数据类型?

  4. 64 位数据类型只是将数据长度加倍还是还有其他一些事情在幕后发生?

4

4 回答 4

21

您不需要 64 位处理器来使用 64 位数据类型。这一切都取决于编译器,并且仅取决于编译器。如果需要,编译器可以为您提供 128 位、237 位或 803 位数据类型。

但是,请记住,通常 32 位 CPU 不能直接处理 64 位值,这意味着支持 64 位类型的所有必要语言操作的负担在于编译器和库。编译器必须生成或多或少复杂的 32 位 CPU 指令序列,以便对 64 位值执行加法、移位、乘法等。这意味着在为 32 位 CPU 生成的代码中,对 64 位数据类型的基本语言操作不会像在为 64 位 CPU 生成的代码中那样高效(因为在后者中,大多数语言操作将由一条 CPU 指令)。

中的“t”int64_t代表“type”或“typedef name”。这是标准库 typedef 的一个旧的公认命名约定。

至于编译器版本,实际上这是一个模棱两可的问题。typedef 名称int64_t是 C 语言标准库的一部分(但不是 C++ 语言),而对 64 位整数类型(任何名称)的支持是编译器的一部分。那你问的是哪一个?例如,MSVC 编译器长期以来一直支持 64 位数据类型,但这些类型的名称却有所不同。64 位有符号整数__int64在 MSVC 中被称为类似的东西。至于int64_ttypedef,AFAIK,即使在今天,它也不是 MSVC 标准库的一部分。事实上,int64_t从其规范的 C99 版本开始成为 C 语言的一部分。同时它不是 C++ 语言的一部分。所以,一般来说,你不应该期望有int64_t在 C++ 代码中,无论编译器的版本如何。

至于数据长度......嗯,是的,它只是增加了一倍的位数。其余的紧随其后。

于 2011-04-03T18:04:43.417 回答
8
  1. 不,您可以在 32 位机器上处理此类数据。只要您的编译器支持这些数据类型就可以了。
  2. int64_t 只是它的名称,如标准中所定义。
  3. 我认为本世纪所有版本的 GCC 和 MSVC 在 32 位架构上都支持 64 位整数。
  4. 64 位整数只是 32 位整数大小的两倍。
于 2011-04-03T16:39:05.290 回答
3

如果你看一下/usr/include/stdint.h,你会发现它int64_t被定义为

typedef long long int int64_t;

所以,正如大卫所说,它是编译器而不是架构依赖的。

于 2011-04-03T16:44:16.187 回答
0

不,32 位架构上的编译器模拟 64 位算术。它不是非常快,但也不是那么糟糕。

t指的是type。这是 C 的遗留问题,其中结构必须以不同的方式引用。

64 位整数类型可能增加了对齐,但仅此而已。

我不知道第 3 点。

于 2011-04-03T16:55:10.327 回答