4

重複の可能性: intの
サイズ、longなどint
のサイズはコンパイラやプロセッサによって異なりますか?

SOで以前に同様の質問があったかどうかはわかりません(少なくとも、検索中に何も見つからなかったので、自分自身に尋ねることを考えました)。

intの(および他のデータ型)のサイズを決定するものC。私はそれがマシン/オペレーティングシステム/コンパイラに依存することを読みましたが、他のものを上書きするものなどについての明確で詳細な説明に出くわしていません。説明やポインタは本当に役に立ちます。

4

4 に答える 4

15

最終的にはコンパイラが行いますが、コンパイルされたコードがシステム ライブラリで適切に動作するようにするために、ほとんどのコンパイラは、ターゲット システムのビルドに使用されるコンパイラの動作と一致します。

大まかに言えば、 のサイズはintターゲット ハードウェアと OS のプロパティです (同じハードウェア上の 2 つの異なる OS は のサイズが異なる場合がありint、2 つの異なるマシンで実行されている同じ OS の のサイズは異なる場合がありintます。両方の一般的な例)。

これらすべては、C 標準の規則によっても制約されます。 たとえば、とintの間のすべての値を表すのに十分な大きさでなければなりません。-3276732767

于 2012-12-07T14:24:10.390 に答える
3

intプラットフォームの「自然な」サイズであり、実際には次のいずれかを意味します

  • プロセッサのレジスタ サイズ、または

  • 既存のコードベースと下位互換性のあるサイズ (例: intWin64 の 32 ビット)。

コンパイラ ベンダーは、値が 16 ビット以上の任意のサイズを自由に選択できますが、(デスクトップ プラットフォーム以上の場合) OS の API で動作しないサイズは、コンパイラのコピーが販売されたとしてもほとんど販売されないことを意味します。;-)

于 2012-12-07T14:23:46.007 に答える
0

SOはウィキペディア以外のすべてを知っているわけではありません。ほとんど... Integer_(computer_science)
を参照してください

注 (b) は次のように述べています。
C/C++ の short、int、および long のサイズは、言語の実装に依存します。データ モデルに依存して、short でさえ 16 ビットから 64 ビットまでのいずれかになります。一般的なプラットフォーム:
古い 16 ビット オペレーティング システムでは、int は 16 ビットで、long は 32 ビットでした.32
ビットの Linux、DOS、および Windows では、int と long は 32 ビットですが、long long は 64 ビットです。 . これは、32 ビット プログラムを実行する 64 ビット プロセッサにも当てはまります
。64 ビット Linux では、int は 32 ビットですが、long と long long は 64 ビットです。
"

于 2012-12-07T14:24:15.320 に答える
0

C データ型のサイズは C 標準によって制約され、多くの場合、最小サイズが制約されます。ホスト環境 (ターゲット マシン + OS) によって、さらに制限が課される場合があります。つまり、最大サイズの制約です。最後に、コンパイラはこれらの最小値と最大値の間で適切な値を自由に選択できます。

一般に、C データ型のサイズを仮定することは悪い習慣だと考えられています。その上、C が教えてくれるので、それは必要ありません:

  • sizeof-operator は、オブジェクトのサイズをバイト単位で示します
  • limits.hのマクロCHAR_BITSは、1 バイトあたりのビット数を示します。

したがって、パディングを含むsizeof(foo) * CHAR_BITStype のサイズをビット単位で示します。foo

それ以外は単なる仮定です。ホスト環境は、ポケット電卓と巨大な黒板を持った 10,000 人の中国人男性で構成され、サイズの制約をどこからともなく引き出していることに注意してください。

于 2012-12-07T14:52:59.950 に答える