尺寸

2011-08-24 172 views
4

可能重复:
Does the size of an int depend on the compiler and/or processor?尺寸

不依赖于编译器或在OS或处理器整数的大小?如果我在使用32位或64位机器的32位操作系统或64位操作系统(本例中只有64位操作系统)上使用gcc,该怎么办?

+1

http://stackoverflow.com/questions/2331751/does-the-size-of-an-int-depend-on-the-compiler-and-or-processor/2331835#2331835 –

回答

3

取决于编译器选项
当然它也取决于编译器本身。
但是,编译器是为一个特定的OS制成,所以它依赖于OS
和/或
编译器是为特定的处理器作出的,因此它取决于处理器

+1

所以你的意思是说,在32位机器和64位机器上运行的gcc的大小会有所不同? – 0x07FC

+0

可能是。取决于使用的选项(http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html) – pmg

0

这取决于系统。系统的意思是处理器和操作系统的任意组合,但它通常绑定到正在使用的处理器的“自然”整数大小。

+0

“int”在64位英特尔系统上。在三大操作系统中,Windows,Linux和OS X中,int仍然是32位,而寄存器大小是64位。但是,在这些平台上'long int'的大小是不同的。 –

1

整型,长等的大小,依赖于编译器,但是编译器实施者会选择为特定的处理器和/或操作系统的最佳大小。

0

一个int的大小,和几乎所有其他的类型,在C是实现定义。某些编译器可能会在特定的平台上做出保证,但这取决于实现。这是你永远不应该依赖的任何东西

+0

这可能是一个愚蠢的语义点,但在C中,int的大小是*实现定义*,而不是* undefined *。实现定义意味着实现必须与其所做的选择一致,并且必须在某处记录其选择,而未定义则意味着所有投注都关闭,编译器可以不一致并任意决定。 – templatetypedef

0

Integer的大小是否取决于编译器,OS还是处理器?

是的。它可以依靠任何这些东西。

它实际上是由平台ABI,它是由编译器和运行时库设置定义,但是编译器使用在不同的操作系统或体系结构不同的ABI。

5

这取决于组合的编译器,处理器和操作系统。

例如,在64位Intel CPU上,在64位模式下,Windows中long int的大小为4字节,而在Linux中和Mac上则为8字节。在英特尔的三个操作系统中,int均为4个字节。

编译器实现者也有选择,但通常使用操作系统使用的东西。但很可能有一个编译器供应商拥有所有三种平台的C编译器,因此决定在这三种平台中使用相同的大小。

当然,它是没有意义的,以16位CPU上使int 4字节(尽管这将是可能的)。

所以它取决于你提到的所有三件事情。