C++ 我需要64位处理器才能使用64位数据类型吗
我有几个问题:C++ 我需要64位处理器才能使用64位数据类型吗,c++,c,64-bit,int64,C++,C,64 Bit,Int64,我有几个问题: 我是否需要64位处理器才能使用64位数据类型(\uu int64或int64\t) int64\t的“t”是什么意思 从支持数据类型的GCC和VCC的哪个版本开始 是64位数据类型只是将数据长度增加了一倍,还是还有其他一些东西在隐藏 不,您可以在32位机器上处理此类数据。只要编译器支持这些数据类型,就可以了 int64_t只是标准中定义的名称 我认为本世纪所有版本的GCC和MSVC都支持32位体系结构上的64位整数 64位整数的大小是32位整数的两倍 如果查看/usr/inclu
如果查看
/usr/include/stdint.h
,您会发现int64\u t
被定义为
typedef long long int int64_t;
因此,正如David所说,它是编译器,而不是依赖于体系结构。不,32位体系结构上的编译器模拟64位算法。速度不是很快,但也没那么糟
t
指的是类型
。这是C语言遗留下来的,在C语言中,必须以不同的方式引用结构
64位整数类型可能增加了对齐,但仅此而已
我不知道第3点。使用64位数据类型不需要64位处理器。这完全取决于编译器,而且只取决于编译器。如果需要,编译器可以为您提供128位、237位或803位数据类型 但是,请记住,通常32位CPU不能直接处理64位值,这意味着支持64位类型的所有必要语言操作的负担在于编译器和库。为了对64位值执行加法、移位、乘法等操作,编译器必须生成或多或少复杂的32位CPU指令序列。这意味着,在为32位CPU生成的代码中,对64位数据类型的基本语言操作的效率将不如为64位CPU生成的代码中的效率(因为在后者中,大多数语言操作将由单个CPU指令执行)
int64\u t
中的“t”代表“type”或“typedef name”。这是标准库typedef的一个古老的公认命名约定
至于编译器版本,这实际上是一个模棱两可的问题。TyPulf名称<代码> Int64→< /C>是C语言的标准库(但不是C++语言)的一部分,而支持64位整数类型(以任意名称)是编译器的一部分。你问的是哪一个?例如,MSVC编译器长期以来一直支持64位数据类型,但这些类型的名称不同。64位有符号整数在MSVC中被称为\uu int64
。至于int64\t
typedef,AFAIK,即使在今天,它也不是MSVC标准库的一部分。事实上,int64\t
从其规范的C99版本开始成为C语言的一部分。同时它不是C++语言的一部分。所以,一般来说,无论编译器的版本如何,都不应该期望在C++代码中有<代码>
至于数据长度。。。嗯,是的,它只是把比特数增加了一倍。其余部分如下。前缀是»type«@rubenvb:arrr的缩写,我应该在单击›添加注释è:-$之前进行校对。关于4,您可能想提及对齐。@AndreyT这意味着,在64位处理器上市之前,64位整数(int64_t)就已经可以使用了。@iamcreasy:Yes,这意味着64位整数数据类型早在64位处理器上市之前就已经存在。但这并不一定意味着它们在当时被专门称为
int64\u t
。@AndreyT什么是“增强对齐”、@DeadMG&@Null Set在谈论什么?@iamcreasy:Hmm。。。你知道什么是对齐吗?所有数据类型通常以对齐方式存储在内存中:数据存储在可被类型大小整除的地址。例如,4字节int
存储在4字节边界(地址可被4整除)。8字节整数变量(64位)通常存储在8字节边界。因此,这适用于您的最后一个问题:64位整数的位是32位整数的两倍,加上其对齐要求大于-8字节,而不是4字节。@iamcreasy:要求来自硬件。计算机内存只能与对齐的数据一起使用(或者只能与对齐的数据一起有效使用)。编译器可以自由地以不对齐的方式存储数据,但在这种情况下,它们将无法将数据作为一个整体读取。无论如何,我之前已经回答了这个问题,您可能会发现它很有用: