在64位机器上应该是sizeof(int)?

可能重复:
int,long等的大小
int的大小是否取决于编译器和/或处理器?
什么决定一个整数的大小?

我正在使用一个64-bit机器。

 $ uname -m x86_64 $ file /usr/bin/file /usr/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped $ 

当我运行下面的程序时,我得到了sizeof(int)4-bytes

 #include <stdio.h> int main(void) { printf("sizeof(int) = %d bytes\n", (int) sizeof(int)); return 0; } 

如果我运行的是16- 32-32-64-位机器,那么这是不是说integer的大小分别是16-64-位?

在我的机器上,我发现WORD_BIT32 。 在64-bit机器上不应该是64 64-bit

 $ getconf WORD_BIT 32 $ 

而且,在上面的情况下sizeof(int)不应该是64-bits8 bytes )吗?

不一定是; “64位机器”可能意味着很多东西,但通常意味着CPU具有很大的寄存器。 一个types的大小是由编译器决定的,不需要与实际的硬件有任何关系(尽pipe通常是这样)。 实际上,同一台机器上的不同编译器可以有不同的值。

在任何64位C / C ++编译器中,指针的大小应为8字节,但不一定是int大小。

不是真的。 为了向后兼容,它是32位的。
如果你想要64位,你有longsize_tint64_t

在C ++中, int的大小没有明确指定。 它只是告诉你它必须至less是short int的大小,它必须至less与signed char一样大。 尽pipesizeof(char)被定义为1,但char的大小并没有明确指定。如果你想要一个64位的int,C ++ 11指定long long至less为64位。