6

最近、ここでのサイズについて質問しましたchar。私の質問を見ると、別の質問
がありました。CPUに依存する、OSに依存する、コンパイラに依存する、charまたはsizeof(int)上記の組み合わせのようなものですか。sizeof(int)私のコンパイラでが4であると誰が決めるのですか?

編集:説明させてください:たとえば、64ビットシステム上の私のコンパイラは32ビットを使用しintます。これは、コンパイラまたはOSによって、この(正確な)OS /プラットフォームの組み合わせ上のすべてのコンパイラの標準intになるように設定されていますか?char= 8ビットはどうですか?OSは16ビット文字を使用することを決定できますか?コンパイラはできますか?

4

3 に答える 3

6

すべての ISO C 標準に従って、すべてのサイズは a の倍数で測定されますchar。これは、定義上、sizeof(char) == 1. charaのビット単位のサイズは、マクロCHAR_BITin <limits.h>(または<climits>) によって定義されます。a の最小サイズcharは 8 ビットです。

追加の型制限は次のとおりです。

sizeof(char) <= sizeof(short int) <= sizeof(int) <= sizeof(long int)

int-32767 から +32767 を表すことができなければなりません - 例えば、少なくとも 16 ビット幅でなければなりません。

C99 が追加されましlong long intた。誰のサイズが より大きいか等しいlong intです。

残りは実装依存です。これは、問題の C コンパイラが数値の正確な大きさを選択できることを意味します。


C コンパイラはこれらのサイズをどのように選択しますか?

ほとんどのコンパイラが従う共通の規則がいくつかあります。long多くの場合、機械語と同じ大きさに選択されます。64ビットマシンではCHAR_BIT == 8(これはほとんどの場合そうであるため、この回答の残りの部分ではそれを想定します)これはsizeof(long) == 8. 32 ビット マシンでは、これはsizeof(long) == 4.

intほとんど常に 32 ビット幅です。

long long int多くの場合、64 ビット幅です。

于 2012-07-22T13:32:46.967 に答える
3

charのビット数やsizeof(int)CPU依存、OS依存、コンパイラ依存、または上記の組み合わせのようなものですか?

コンパイラに依存します。また、コンパイラはCPUに依存し、OSに依存します。

つまり、4バイトのPCでプログラムをコンパイルしintvoid*実行可能ファイルを別のマシンに移動した場合、そこでは別のバイト数になることはありません。コンパイラは、特定のマシンのマシンコードを出力します。

ただし、同じソースを別のコンパイラ、同じコンパイラバージョンで異なるOS、または同じコンパイラで異なる設定でコンパイルすると、変更が発生する可能性があります。

たとえば、64ビットGCCを搭載したPCvoid*では8バイトかかりますが、それを使用してコンパイルすると-m324バイトかかります。

于 2012-07-22T13:19:59.120 に答える
2

さて、それらの情報を設定するのはコンパイラです。そして、彼はソフトウェア/ハードウェアの詳細(あなたが言ったようにCPUやOSなど)に従ってこれを行います。

于 2012-07-22T13:21:34.367 に答える