web-dev-qa-db-ja.com

16ビットIntと32ビットIntと64ビットInt

これまでコンピュータサイエンスの正式な教育を受けたことがないので(これは高校生です)、これについて長い間疑問に思っていたので、この件についての無知を許してください。

タイトルにリストされている3種類の整数をサポートするプラットフォームでは、どちらが優れていますか、またそれはなぜですか? (メモリ内ではすべての種類のintの長さが異なることは知っていますが、それが何を意味するか、またはどのようにパフォーマンスに影響するか、または開発者の観点から、どちらが他よりも優れているかはわかりません)。

よろしくお願いします。

17
arturovm

「より良い」は主観的な用語ですが、一部の整数は特定のプラットフォームでより高いパフォーマンスを発揮します。

たとえば、32ビットコンピューター(32ビットプラットフォームやWin32などの用語で参照)では、CPUは32ビット値を一度に処理するように最適化され、32はCPUが消費できるビット数を指しますまたは単一サイクルで生成します。 (これは非常に単純な説明ですが、全体的な概念を理解しています)。

64ビットコンピュータ(最近のAMDおよびIntelプロセッサはこのカテゴリに分類されます)では、CPUは一度に64ビット値を処理するように最適化されています。

したがって、32ビットのプラットフォームでは、32ビットのアドレスに読み込まれた16ビットの整数は、CPUが動作できるように16ビットをゼロにする必要があります。 32ビット整数は変更せずにすぐに使用でき、64ビット整数は2つ以上のCPUサイクルで動作する必要があります(低32ビットの場合は1回、次に高32ビットの場合は再度)。 。

逆に、64ビットプラットフォームでは、16ビット整数は48ビットをゼロにする必要があり、32ビット整数は32ビットをゼロにする必要があり、64ビット整数はすぐに操作できます。

各プラットフォームとCPUには「ネイティブ」ビット数(32や64など)があり、これにより通常、そのCPUがアクセスできる他のリソースの一部が制限されます(たとえば、32ビットプロセッサの3GB/4GBメモリ制限)。 )。 80386プロセッサフ​​ァミリ(およびそれ以降のx86)プロセッサが32ビットを標準にしましたが、現在AMDやIntelなどの企業が64ビットを標準にしています。

26
M. Shawn Dillon

最初の質問に答えるために、16ビット整数と32ビット整数と64ビット整数の使用法は、それが使用されるコンテキストによって異なります。したがって、言うまでもなく、一方が他方より優れているとは言えません。ただし、状況によっては重ねて使う方が好ましい。この例を考えてみましょう。たとえば、1,000万人のユーザーがいるデータベースがあり、そのユーザーが生まれた年を保存したいとします。データベースに64ビット整数のフィールドを作成すると、80メガバイトのストレージを使い果たしてしまいます。一方、16ビットのフィールドを使用する場合は、20メガバイトのストレージしか使用されません。人が生まれる年は最大の16ビット数よりも小さいため、ここでは16ビットフィールドを使用できます。言い換えると、1980、1990、1991 <65535、フィールドが署名されていない場合。全体として、それはコンテキストに依存します。これがお役に立てば幸いです。

9
WindsurferOak

簡単な答えは、含まれている可能性のある値の範囲に対して安全であることがわかっている最小のものを使用することです。

可能な値が最大長の16ビット整数よりも小さくなるように制限されていることがわかっている場合(たとえば、年の何日に対応する値-常に<= 366)なら、それを使用します。不明な場合(たとえば、データベース内の任意の数の行を持つことができるテーブルのレコードID)、判断に応じてInt32またはInt64を使用します。

他のものはおそらく、使用しているプログラミング言語に応じて、パフォーマンスの利点をよりよく理解できますが、型が小さいほどメモリの使用量が少ないため、より大きな型を必要としない場合は「より良い」使用法です。

参考までに、16ビット整数は2 ^ 16の可能な値があることを意味します-通常0から65,535の間で表されます。 32ビット値の範囲は0から2 ^ 32-1、または42.9億を少し超える程度です。

この質問 2ビットCPUでは、「整数」タイプは「短い」タイプよりも効率的ですか? より良い情報が追加される場合があります。

4
nycdan

速度とストレージのどちらを最適化するかによって異なります。速度に関心があり、SQL Serverを64ビットモードで実行している場合は、64ビットキーが必要です。 64ビットモードで実行される64ビットプロセッサは、64ビットの数値とアドレスを使用するように最適化されています。同様に、32ビットモードで実行される64ビットプロセッサは、32ビットの数値とアドレスを使用するように最適化されています。たとえば、64ビットモードでは、スタックへのすべてのプッシュとポップは8バイトなどです。キャッシュとメモリからのフェッチも64ビットの数値とアドレスに対して最適化されます。 64ビットモードで実行されているプロセッサは、32ビットモードで実行されているプロセッサと同様に、32ビット数を処理するためにより多くのマシンサイクルを必要とする場合があります。処理時間の増加はさまざまな理由で発生しますが、メモリアラインメントの例について考えてみてください。32ビットの数値は64​​ビットの整数境界にアラインされていない可能性があります。登録。少なくとも、各操作の前に32ビットごとにマスクする必要があります。 64ビットモードで32ビットまたは16ビット整数を処理している間は、少なくともプロセッサの実効速度を半分にすることを話している。

1
Jack D Menendez