83

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?

I'm using a 64-bit machine.

$ 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
$ 

When I ran the following program, I got the sizeof(int) as 4-bytes.

#include <stdio.h>

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

    return 0;
}

If I'm running a 16-, 32- and 64- bit machine, then doesn't it mean that the size of an integer is 16-, 32- and 64- bit respectively?

In my machine, I found the WORD_BIT is 32. Shouldn't it be 64 on a 64-bit machine?

$ getconf WORD_BIT
32
$ 

And, shouldn't the sizeof(int) be 64-bits (8 bytes) in the above case?

4

4 回答 4

72

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

于 2012-04-17T18:57:17.927 回答
61

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

于 2012-04-17T18:55:16.370 回答
32

并不真地。为了向后兼容,它是 32 位。
如果你想要 64 位longsize_t或者int64_t

于 2012-04-17T18:55:06.980 回答
11

在 C++ 中,int没有明确指定的大小。它只是告诉您它必须至少是 的大小short int,而它必须至少与 一样大signed char。尽管 sizeof(char) 被定义为 1,但 in 位的大小char也没有明确指定。如果您想要 64 位 int,C++11 指定long long至少为 64 位。

于 2012-04-17T18:55:58.513 回答