关于c ++:64位机器上的sizeof(int)应该是什么?

What should be the sizeof(int) on a 64-bit machine?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
size of int, long, etc
Does the size of an int depend on the compiler and/or processor?
What decides the sizeof an integer?

我在用一台64-bit机器。

1
2
3
4
5
$ 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

1
2
3
4
5
6
7
8
9
#include <stdio.h>

int main(void)
{
    printf("sizeof(int) = %d bytes
"
, (int) sizeof(int));

    return 0;
}

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

在我的机器里,我发现WORD_BIT32。难道不是64-bit机器上的64吗?

1
2
3
$ getconf WORD_BIT
32
$

在上述情况下,sizeof(int)不应该是64-bits(8 bytes吗?


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


不必是,"64位机器"可能意味着很多事情,但通常意味着CPU有那么大的寄存器。类型的大小是由编译器决定的,它与实际的硬件没有任何关系(尽管它通常是这样);事实上,同一台机器上的不同编译器可以有不同的值。


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


在C++中,没有明确指定EDCOX1×3Ω的大小。它只是告诉你它必须至少是short int的大小,它必须至少和signed char一样大。虽然size of(char)被定义为1,但也没有明确指定以位为单位的char的大小。如果你想要一个64位的int,C++ 11指定EDCOX1×7Ω至少是64位。