3

int のサイズはどのように決定されますか?

int のサイズがプロセッサに依存するというのは本当ですか。32 ビット マシンの場合は 32 ビット、16 ビット マシンの場合は 16 になります。

私のマシンでは、64 ビット プロセッサと 64 ビット Ubuntu がインストールされていますが、32 ビットとして表示されます。

4

6 に答える 6

8

実装に依存します。C標準が保証する唯一のことは、

sizeof(char) == 1

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

charまた、少なくとも 8 ビットの長さ、int少なくとも 16 ビットなどを意味する、型の表現可能な最小値もいくつかあります。

そのため、実装 (コンパイラ、OS など) によって決定され、文書化される必要があります。

于 2012-10-05T04:56:07.487 に答える
3

コンパイラに依存します。

例:古いターボCコンパイラを試してください。コンパイラの作成時のワードサイズ(プロセッサが最小限の労力で対処できるサイズ)が16だったため、intのサイズは16ビットになります。

于 2012-10-05T04:55:18.790 に答える
0

できるだけint広くすることは最良の選択ではありません。(選択はABI設計者によって行われます。)

x86-64 のような 64 ビット アーキテクチャは で効率的に動作するため、 が 64 ビットであることはint64_t自然なことです。long(Microsoft はlongx86-64 ABI で 32 ビットを維持しました。これは、既存のコードベースと API を考えると理にかなっているさまざまな移植性の理由からです。実際に型のサイズを気にする移植可能なコードは、 and について仮定する代わりに and を使用する必要があるため、これは基本的に無関係int32_tです。 )int64_tintlong

int多くの場合、実際にはbeをint32_t使用することで、より優れた効率的なコードを作成できます。int要素ごとに 4B しか使用しない配列は、 の配列の半分のキャッシュ フットプリントしかありませんint64_t。また、x86-64 に固有の 32 ビット オペランド サイズがデフォルトであるため、64 ビット命令には REX プレフィックス用に追加のコード バイトが必要です。したがって、コード密度は、16 ビットまたは 64 ビットよりも 32 ビット (または 8 ビット) の整数の方が優れています。(ドキュメント、ガイド、学習リソースへのリンクについては、

プログラムが正しく動作するために 64 ビット整数型を必要とする場合、プログラムは を使用しませんint。(ポインターを anintではなくan に格納するのintptr_tはバグであり、そのような壊れたコードに対応するために ABI を悪化させるべきではありません。)intほとんどのプラットフォームはそのように動作するため、プログラマーはおそらく 32 ビット型を期待していました。(もちろん、標準は16ビットのみを保証しています)。

int一般に (32 ビット プラットフォームなどで) 64 ビットになることは期待されておらず、64 ビットにすると一部のプログラムが遅くなる (ほとんどのプログラムは高速にならない) ため、intほとんどの 64 ビット ABI では 32 ビットです。

int32_tまた、for であるためには、32 ビット整数型の名前が必要typedefです。

于 2016-03-21T21:39:33.577 に答える
0

プライマリ コンパイラに依存します。ターボ c を使用している場合は、整数サイズが 2 バイトであることを意味します。GNU gccompiler を使用している場合は、整数サイズが 4 バイトであることを意味します。Cコンパイラでの実装のみに依存しています。

于 2012-10-05T05:09:48.373 に答える
0

整数のサイズは、基本的にシステムに依存しarchitectureます。一般に、16-bitマシンを使用している場合compilerは、int をサポートする必要がありsize 2 byte. ます。システムが 32 ビットの場合、コンパイラは整数の 4 バイトをサポートする必要があります。

詳しくは、

  • data busはい、16ビット、32ビットの概念はsize of data bus、あなたのシステムでは何も意味しません。
  • データ バスのサイズは、整数のサイズを決定するために必要です。データ バスの目的は、プロセッサにデータを提供することです。1 回のフェッチでプロセッサに提供できる最大サイズが重要であり、この最大サイズが優先されます。コンパイラは一度にデータを与えます。
  • システムのこのデータ バス サイズに基づいて、コンパイラはデータ バスの最大サイズを整数のサイズとして提供するように設計されています。
x06->16-bit->DOS->turbo c->size of int->2 byte
x306->32-bit>windows/Linux->GCC->size of int->4 byte
于 2012-10-05T08:31:26.120 に答える
-1

はい。 intサイズはコンパイラのサイズに依存します。16 ビット整数の場合、整数の範囲は -32768 ~ 32767 です。32 ビットおよび 64 ビット コンパイラの場合は増加します。

于 2013-02-07T06:16:49.977 に答える