web-dev-qa-db-ja.com

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-64-ビットマシンを実行している場合、integerのサイズはそれぞれ16-32-64-ビットであることを意味しませんか?

私のマシンでは、Word_BIT32であることがわかりました。 64マシンでは64-bitであってはなりませんか?

$ getconf Word_BIT
32
$ 

また、上記の場合、sizeof(int)64-bits8 bytes)であってはなりませんか?

61

である必要はありません。 「64ビットマシン」は多くのことを意味しますが、通常はCPUにそのような大きなレジスタがあることを意味します。型のサイズはコンパイラによって決定されますが、実際のハードウェアとは何の関係もありません(通常はそうです)。実際、同じマシン上の異なるコンパイラーは、これらに対して異なる値を持つことができます。

45
Scott Hunter

ポインターのサイズは、64ビットC/C++コンパイラーでは8バイトである必要がありますが、必ずしもintのサイズではありません。

59
Eugene

あんまり。下位互換性のために、32ビットです。
64ビットが必要な場合、longsize_t、またはint64_tがあります

23
Dani

C++では、intのサイズは明示的に指定されていません。少なくともshort intのサイズでなければならず、少なくともsigned charと同じ大きさでなければならないことを伝えます。 charのビット単位のサイズも明示的に指定されていませんが、sizeof(char)は1に定義されています。64ビットのintが必要な場合、C++ 11はlong longを少なくとも64ビット。

8
juanchopanza