次のステートメントが を返すことを考えると、C++のとの型4
の違いは何ですか?int
long
sizeof(int)
sizeof(long)
この参照から:
int はもともと、プロセッサの「自然な」ワード サイズになるように意図されていました。最新のプロセッサの多くは、さまざまなワード サイズを同じように簡単に処理できます。
また、このビット:
多くの (すべてではない) C および C++ の実装では、long は int よりも大きくなります。Windows や Linux など、今日最も人気のあるデスクトップ プラットフォームは、主に 32 ビット プロセッサで実行され、これらのプラットフォーム用のほとんどのコンパイラは、long と同じサイズと表現を持つ 32 ビット int を使用します。
標準が提供する保証は次のようになります。
1 == sizeof(char) <= sizeof(short) <= sizeof (int) <= sizeof(long) <= sizeof(long long)
したがって、 と が等しいことは完全に有効でsizeof (int)
あり、多くのプラットフォームがこのアプローチを採用しています。32 ビット、64 ビット、 128 ビットsizeof (long)
のプラットフォームがいくつかありますが、4 であることが非常に一般的です。int
long
long long
sizeof (long)
(これlong long
は C99 以降の C で認識されますが、通常は C++11 より前の C++ では拡張機能として実装されていたことに注意してください。)
32 ビット マシンまたは 64 ビット Windows マシンを使用している。私の 64 ビット マシン (Windows ではなく、Unix 派生の O/S を実行している) ではsizeof(int) == 4
、sizeof(long) == 8
.
それらは異なるタイプです — 互いに同じサイズの場合もあれば、そうでない場合もあります。
(本当に古い時代、sizeof(int) == 2
そしてsizeof(long) == 4
— それは C++ が存在する前の時代だったかもしれませんが、考えてみてください。それでも、技術的には、それは正当な構成ですが、組み込み分野の外では珍しいものであり、おそらく世界でも珍しいものです。埋め込まれたスペース。)
両方が同じサイズのプラットフォームでは、答えは何もありません。どちらも符号付きの 4 バイト値を表します。
ただし、これが真実であることに依存することはできません。long と int のサイズは、標準では明確に定義されていません。コンパイラが型に異なるサイズを与える可能性があるため、この仮定を破ることができます。
long は少なくとも int と同じサイズである必要があり、場合によっては、必ずしもそうとは限りません。
一般的な 32 ビット システムでは、int と long の両方が 4 バイト/32 ビットであり、これは C++ 仕様に従って有効です。
他のシステムでは、int と long long のサイズが異なる場合があります。int が 2 バイト、long が 4 バイトのプラットフォームで作業していました。
一般的なベスト プラクティスは、long/int/short を直接使用しないことです。代わりに、コンパイラと OS の仕様に従って、それらをヘッダー ファイルにラップして、必要なビット量を正確に保持できるようにします。次に、long/int/short の代わりに int8/int16/int32 を使用します。たとえば、32 ビット Linux では、次のようなヘッダーを定義できます。
typedef char int8;
typedef short int16;
typedef int int32;
typedef unsigned int uint32;