int のサイズはどのように決定されますか?
int のサイズがプロセッサに依存するというのは本当ですか。32 ビット マシンの場合は 32 ビット、16 ビット マシンの場合は 16 になります。
私のマシンでは、64 ビット プロセッサと 64 ビット Ubuntu がインストールされていますが、32 ビットとして表示されます。
int のサイズはどのように決定されますか?
int のサイズがプロセッサに依存するというのは本当ですか。32 ビット マシンの場合は 32 ビット、16 ビット マシンの場合は 16 になります。
私のマシンでは、64 ビット プロセッサと 64 ビット Ubuntu がインストールされていますが、32 ビットとして表示されます。
実装に依存します。C標準が保証する唯一のことは、
sizeof(char) == 1
と
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
char
また、少なくとも 8 ビットの長さ、int
少なくとも 16 ビットなどを意味する、型の表現可能な最小値もいくつかあります。
そのため、実装 (コンパイラ、OS など) によって決定され、文書化される必要があります。
コンパイラに依存します。
例:古いターボCコンパイラを試してください。コンパイラの作成時のワードサイズ(プロセッサが最小限の労力で対処できるサイズ)が16だったため、intのサイズは16ビットになります。
できるだけint
広くすることは最良の選択ではありません。(選択はABI設計者によって行われます。)
x86-64 のような 64 ビット アーキテクチャは で効率的に動作するため、 が 64 ビットであることはint64_t
自然なことです。long
(Microsoft はlong
x86-64 ABI で 32 ビットを維持しました。これは、既存のコードベースと API を考えると理にかなっているさまざまな移植性の理由からです。実際に型のサイズを気にする移植可能なコードは、 and について仮定する代わりに and を使用する必要があるため、これは基本的に無関係int32_t
です。 )int64_t
int
long
int
多くの場合、実際にはbeをint32_t
使用することで、より優れた効率的なコードを作成できます。int
要素ごとに 4B しか使用しない配列は、 の配列の半分のキャッシュ フットプリントしかありませんint64_t
。また、x86-64 に固有の 32 ビット オペランド サイズがデフォルトであるため、64 ビット命令には REX プレフィックス用に追加のコード バイトが必要です。したがって、コード密度は、16 ビットまたは 64 ビットよりも 32 ビット (または 8 ビット) の整数の方が優れています。(ドキュメント、ガイド、学習リソースへのリンクについては、 x86 wiki を参照してください。)
プログラムが正しく動作するために 64 ビット整数型を必要とする場合、プログラムは を使用しませんint
。(ポインターを anint
ではなくan に格納するのintptr_t
はバグであり、そのような壊れたコードに対応するために ABI を悪化させるべきではありません。)int
ほとんどのプラットフォームはそのように動作するため、プログラマーはおそらく 32 ビット型を期待していました。(もちろん、標準は16ビットのみを保証しています)。
int
一般に (32 ビット プラットフォームなどで) 64 ビットになることは期待されておらず、64 ビットにすると一部のプログラムが遅くなる (ほとんどのプログラムは高速にならない) ため、int
ほとんどの 64 ビット ABI では 32 ビットです。
int32_t
また、for であるためには、32 ビット整数型の名前が必要typedef
です。
プライマリ コンパイラに依存します。ターボ c を使用している場合は、整数サイズが 2 バイトであることを意味します。GNU gccompiler を使用している場合は、整数サイズが 4 バイトであることを意味します。Cコンパイラでの実装のみに依存しています。
整数のサイズは、基本的にシステムに依存しarchitecture
ます。一般に、16-bit
マシンを使用している場合compiler
は、int をサポートする必要がありsize 2 byte.
ます。システムが 32 ビットの場合、コンパイラは整数の 4 バイトをサポートする必要があります。
詳しくは、
data bus
はい、16ビット、32ビットの概念はsize of data bus
、あなたのシステムでは何も意味しません。x06->16-bit->DOS->turbo c->size of int->2 byte x306->32-bit>windows/Linux->GCC->size of int->4 byte
はい。 int
サイズはコンパイラのサイズに依存します。16 ビット整数の場合、整数の範囲は -32768 ~ 32767 です。32 ビットおよび 64 ビット コンパイラの場合は増加します。