32位或64位操作系统如何影响数据类型的范围。?
答案 0 :(得分:2)
您的意思是它如何影响sizeof(int)
,sizeof(long)
等?
在32位机器上,指针将是4个字节(即sizeof(int*) == 4
),而在64位机器上,指针将是8个字节。除此之外,我认为C或C ++标准不需要基于OS体系结构的原始类型的大小(实际上我甚至不确定指针大小是否是标准的,尽管它很奇怪在64位计算机上使用sizeof(int*) < 8
,而在32位计算机上使用sizeof(int*) > 4
则相当浪费)
答案 1 :(得分:1)
不直接影响基本类型的大小。
“32位”或“64位”操作系统的定义并非100%明确。通常,32位操作系统将使用32位指针,而64位操作系统将使用64位指针。
对于具有单片线性地址空间的典型系统,某些typedef的大小(例如size_t
和ptrdiff_t
)通常与指针的大小相同。
C和C ++标准对此很少说。他们为各种类型指定最小大小(char
至少为8位,short
至少为16,int
16,long
32,以及long long
64,该列表中的每种类型至少与其前一种类型一样宽。语言允许一些你在现实生活中不太可能看到的非常奇怪的实现(例如,7位字节指针和9字节long
的11位字节)。 / p>
实际大小通常由给定系统的ABI确定 - 例如,对于同一硬件上的不同64位系统,实际大小可能不同。
碰巧(差不多)我所使用的所有系统碰巧都具有相同大小的所有指针类型,并且对指针使用相同的大小并键入long
,但是你不应该指望它。
理想情况下,您应该将代码编写为可以合理制作的便携式代码。使用sizeof
运算符而不是假设给定类型有多大(尽管char
绝对保证恰好是1个字节)。如果您需要指定大小的类型,请使用<stdint.h>
中的typedef(或者,在C ++中,<cstdint>
)。
答案 2 :(得分:-3)
它根本不一定会影响它。它只是意味着指针将是长而不是int。但类型不会改变。而且只有在实际编译为64位时才会这样。