Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ int的大小是否取决于编译器和/或处理器?_C++_C_Types - Fatal编程技术网

C++ int的大小是否取决于编译器和/或处理器?

C++ int的大小是否取决于编译器和/或处理器?,c++,c,types,C++,C,Types,整数的大小取决于编译器、操作系统和处理器吗?是的,我发现turbo C中int的大小是2字节,而MSVC编译器中int的大小是4字节 int的大小基本上就是处理器寄存器的大小。是的,它会。他们的意思是“它取决于哪个:编译器还是处理器”?在这种情况下,答案基本上是“两者皆有”。通常,int不会大于处理器寄存器(除非小于16位),但它可以更小(例如,在64位处理器上运行的32位编译器)。但是,通常需要一个64位处理器来运行64位整数的代码。是的,它取决于处理器(更具体地说,是ISA,指令集体系结构,

整数的大小取决于编译器、操作系统和处理器吗?

是的,我发现turbo C中int的大小是2字节,而MSVC编译器中int的大小是4字节


int的大小基本上就是处理器寄存器的大小。

是的,它会。他们的意思是“它取决于哪个:编译器还是处理器”?在这种情况下,答案基本上是“两者皆有”。通常,
int
不会大于处理器寄存器(除非小于16位),但它可以更小(例如,在64位处理器上运行的32位编译器)。但是,通常需要一个64位处理器来运行64位整数的代码。

是的,它取决于处理器(更具体地说,是ISA,指令集体系结构,例如x86和x86-64)和编译器,包括编程模型。例如,在16位机器中,sizeof(int)是2个字节。32位机器有4个字节用于
int
。它被认为是处理器的本机大小,即寄存器的大小。然而,32位计算机非常流行,并且已经为32位编程模型编写了大量的软件。所以,如果64位计算机的
int
有8个字节,这将非常令人困惑。对于
int
,Linux和Windows都保留4个字节。但是,它们在
long
的大小上有所不同

请查看64位编程模型,如适用于大多数*nix的LP64,以及适用于Windows的LLP64


当您编写既可以在Windows上运行又可以在Linux上运行的代码时,这种差异实际上相当令人尴尬。因此,我总是使用
int32\u t
int64\u t
,而不是
long
,via.

这个问题的答案取决于我们离实际考虑的距离

理论上,C和C++中的一切都依赖于编译器,而只依赖于编译器。硬件/操作系统根本不重要。编译器可以自由实现任意厚度的硬件抽象层,并完全模拟任何内容。没有什么可以阻止C或C++实现实现任意大小和任何表示的<代码> int /COD>类型,只要它足够大,以满足语言标准中规定的最低要求。这种抽象级别的实际示例很容易获得,例如基于“虚拟机”平台的编程语言,如Java

但是,C和C++是高效的语言。为了达到最高效率,C或C++实现必须考虑来自底层硬件的某些考虑。因此,确保每个基本类型都基于硬件直接(或几乎直接)支持的某种表示非常有意义。从这个意义上讲,基本类型的大小确实取决于硬件


换句话说,对于一个64位的硬件/ OS平台,一个特定的C或C++实现完全可以自由实现<代码> int >代码>,作为71位1’s补符号整数类型,占用128位内存,使用其他57位作为存储编译器作者女友生日信息所需的填充位。这种实现甚至具有一定的实用价值:它可以用来执行C/C++程序可移植性的运行时测试。但这正是该实现的实用性将终结的地方。不要期望在“普通”C/C++编译器中看到类似的情况。

数据类型大小取决于处理器,因为编译器希望在下一个字节更容易访问CPU。例如:如果处理器是32位的,编译器可能不会选择整数大小为2字节[它应该选择4字节],因为访问该整数的另外2字节(4字节)将需要额外的CPU周期,这是浪费。若编译器选择int作为4字节,CPU可以一次性访问完整的4字节,这将加快应用程序的速度


感谢

int的大小等于取决于基础ISA的字长。处理器只是ISA的硬件实现,而编译器只是ISA的软件端实现。一切都围绕着基础ISA展开。目前最流行的ISA是英特尔的IA-32。它的字长为32位或4字节。4字节可能是“int”(仅为纯int,而不是短或长)编译器的最大大小。基于IA-32,可以使用

根据最近的一些研究,我为固件访谈做了如下准备:

处理器位体系结构(即8位、16位、32位和64位)最重要的影响是如何最有效地存储每个字节的信息,以便以最少的周期数最佳地计算变量

处理器的位大小告诉您CPU在一个周期内能够处理的自然字长。如果32位机器在内存中正确对齐,则需要2个周期来处理64位双精度计算机。大多数个人计算机过去是32位的,现在仍然是32位的,因此C编译器最有可能与32位整数密切相关,并具有较大浮点数和长整数的选项

显然,您可以计算更大的变量大小,因此从这个意义上讲,CPU的位体系结构决定了它必须如何存储越来越大的变量和越来越小的变量,以实现尽可能高的处理效率,但它绝不是INT或CHAR字节大小定义中的限制因素,这是编译器的一部分,是由约定或标准规定的

我发现这个网站非常有帮助,可以解释CPU的自然字长如何影响它如何选择存储和处理大小不同的变量类型,特别是在结构的位打包方面。您必须非常清楚如何选择分配变量,因为较大的变量需要