可能性のある複製:
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_BIT
が32
であることがわかりました。 64
マシンでは64-bit
であってはなりませんか?
$ getconf Word_BIT
32
$
また、上記の場合、sizeof(int)
は64-bits
(8 bytes
)であってはなりませんか?
である必要はありません。 「64ビットマシン」は多くのことを意味しますが、通常はCPUにそのような大きなレジスタがあることを意味します。型のサイズはコンパイラによって決定されますが、実際のハードウェアとは何の関係もありません(通常はそうです)。実際、同じマシン上の異なるコンパイラーは、これらに対して異なる値を持つことができます。
ポインターのサイズは、64ビットC/C++コンパイラーでは8バイトである必要がありますが、必ずしもintのサイズではありません。
あんまり。下位互換性のために、32ビットです。
64ビットが必要な場合、long
、size_t
、またはint64_t
があります
C++では、int
のサイズは明示的に指定されていません。少なくともshort int
のサイズでなければならず、少なくともsigned char
と同じ大きさでなければならないことを伝えます。 char
のビット単位のサイズも明示的に指定されていませんが、sizeof(char)は1に定義されています。64ビットのintが必要な場合、C++ 11はlong long
を少なくとも64ビット。