32位或64位操作系统如何影响数据类型范围

时间:2013-11-22 21:39:02

标签: c++ c

32位或64位操作系统如何影响数据类型的范围。?

3 个答案:

答案 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_tptrdiff_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位时才会这样。