83

重複の可能性: 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)asを取得しました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がです3264それは64-bit機械にあるべきではありませんか?

$ getconf WORD_BIT
32
$ 

そして、上記の場合は( )ではないsizeof(int)でしょうか?64-bits8 bytes

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++11long longは少なくとも64ビットを指定します。

于 2012-04-17T18:55:58.513 に答える