19

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

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

よろしくお願いします。

4

5 に答える 5

34

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

たとえば、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ビットを標準にしています。

于 2011-04-28T01:11:20.453 に答える
10

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

于 2011-04-28T01:06:43.170 に答える
6

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

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

他の言語は、使用しているプログラミング言語に応じてパフォーマンスの利点をよりよく理解できる可能性がありますが、タイプが小さいほどメモリの使用量が少なくなるため、大きくする必要がない場合は「より適切」に使用できます。

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

この質問32ビットCPUでは、「整数」型は「短い」型よりも効率的ですか?さらに良い情報を追加するかもしれません。

于 2011-04-28T00:57:23.397 に答える
1

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

于 2013-01-22T17:45:18.390 に答える
-1

初心者プログラマーに簡単な説明を提供します。ビットは0または1のいずれかです。

  • 16ビットIntは、16ビット(16個の0と1)の文字列で表される整数です。
  • 32ビットIntは、32ビット(32個の0と1)の文字列で表される整数です。
  • 64ビットのIntは、 64ビットの文字列(64個の0と1)で表される整数です。

それらの概念を家に持ち帰る例:

  • 16ビット整数の例は、 int6に等しい0000000000000110になります。
  • 32ビット整数の例は、int16934に等しい00000000000000000100001000100110になります。
  • 64ビット整数の例は0000100010000000010000100010011000000000000000000100001000100110で、これはint612562280298594854と同じです。

16ビットよりも32ビットよりも64ビットで多数の整数を表すことができます。したがって、使用するビット数を減らすことの利点は、マシンのスペースを節約できることです。より多くのビットを使用する利点は、より多くの整数を表すことができることです。

于 2021-03-31T19:48:45.893 に答える