我是否需要使用64位处理器才能使用64位数据类型
我有几个问题:
-
我是否需要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指令)。
int64_t
的“t”代表“type”或“typedef name”。 这是标准库typedef的旧接受命名约定。
至于编译器版本,实际上这是一个模棱两可的问题。 typedef名称int64_t
是C语言标准库(但不是C ++语言)的一部分,而对64位整数类型(任何名称)的支持是编译器的一部分。 你问哪一个? 例如,MSVC编译器长期以来一直支持64位数据类型,但这些类型的名称不同。 64位有符号整数在MSVC中称为__int64
。 对于int64_t
typedef,AFAIK,即使在今天它也不是MSVC标准库的一部分。 事实上, int64_t
从其规范的C99版本成为C语言的一部分。 同时它不是C ++语言的一部分。 因此,通常,无论编译器的版本如何,您都不应期望在C ++代码中使用int64_t
。
至于数据长度……嗯,是的,它只是位数的两倍。 其余的如下。
- 不,您可以在32位计算机上处理此类数据。 只要您的编译器支持这些数据类型就可以了。
- int64_t就是它的名字,如标准中所定义。
- 我认为本世纪所有版本的GCC和MSVC都支持32位架构上的64位整数。
- 64位整数的大小只是32位整数的两倍。
如果你看一下/usr/include/stdint.h
,你会发现int64_t
被定义为
typedef long long int int64_t;
所以,正如David所说,它是编译器而不是架构依赖。
不,32位架构的编译器模拟64位算术。 它并不是非常快,但并不是那么糟糕。
t
指的是type
。 这是来自C的遗产,其中结构必须以不同方式引用。
64位积分类型可能会增加对齐,但这就是它。
我不知道第3点。