我有几个问题:
我是否需要 64 位处理器才能使用 64 位数据类型(__int64 或 int64_t)?
int64_t 的“t”是什么意思?
从哪个版本的 GCC 和 VCC 开始支持数据类型?
64 位数据类型只是将数据长度加倍还是还有其他一些事情在幕后发生?
您不需要 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_t
typedef,AFAIK,即使在今天,它也不是 MSVC 标准库的一部分。事实上,int64_t
从其规范的 C99 版本开始成为 C 语言的一部分。同时它不是 C++ 语言的一部分。所以,一般来说,你不应该期望有int64_t
在 C++ 代码中,无论编译器的版本如何。
至于数据长度......嗯,是的,它只是增加了一倍的位数。其余的紧随其后。
如果你看一下/usr/include/stdint.h
,你会发现它int64_t
被定义为
typedef long long int int64_t;
所以,正如大卫所说,它是编译器而不是架构依赖的。
不,32 位架构上的编译器模拟 64 位算术。它不是非常快,但也不是那么糟糕。
t
指的是type
。这是 C 的遗留问题,其中结构必须以不同的方式引用。
64 位整数类型可能增加了对齐,但仅此而已。
我不知道第 3 点。