質問

私はプログラミングの初心者で、CS 以外のバックグラウンドを持っています (正式な学位はありません)。私は主に C# を使用して winform をプログラミングします。

32ビットと64ビットで迷っています...つまり、32 ビット OS、32 ビット プロセッサ、およびそれに基づいてプログラムが最大メモリを搭載できるということを聞いたことがあるでしょう。それがプログラムの速度にどのように影響するか。他にもたくさんの疑問が頭に浮かび続けます。

私はコンピュータの組織とアーキテクチャの本を何冊か読んでみました。しかし、私がそこに書かれている内容を理解できないほど愚かであるか、あるいはライターが読者にある程度の CS の背景があると想定しているかのどちらかです。

誰かがこれらのことを単純な英語で説明してくれるか、それを行うものを教えてくれませんか。

編集: 32 ビット モードでは、最大 4GB のメモリにアクセスできます。64 ビット モードでは、さらに多くのことにアクセスできます。なぜそのようなことが起こるのか知りたいです。

報奨金:以下の回答は本当に素晴らしいです...特に Martin による回答です。しかし、私は徹底的な説明を見ていますが、単純な英語で書かれています。

役に立ちましたか?

解決

本当にすべてはワイヤーにかかっています。

デジタル回路では、ある要素 (CPU) から別の要素 (メモリ チップ) に送信できるのは 0 と 1 (通常は低電圧と高電圧) だけです。ワイヤが 1 本しかない場合、クロック サイクルごとに 1 または 0 のいずれかのみをワイヤ上で送信できます。これは、2 バイトしかアドレス指定できないことを意味します (バイト アドレス指定があり、速度を上げるためにアドレス全体がわずか 1 サイクルで送信されると仮定します)。

2 本のワイヤがある場合、4 バイトをアドレス指定できます。なぜなら、次のものを送信できるからです。2 本のワイヤ上の (0, 0)、(0, 1)、(1, 0)、または (1, 1)。したがって、基本的にはワイヤの数の 2 乗になります。

したがって、32 本のワイヤがある場合は 4 GB をアドレス指定でき、64 本のワイヤがある場合はさらに多くのアドレスを指定できます。

ワイヤで許容されるよりも大きなアドレス空間に対処するためにエンジニアが実行できるトリックは他にもあります。例えば。アドレスを 2 つの部分に分割し、最初のサイクルで半分を送信し、次のサイクルで後半を送信します。しかし、それはメモリインターフェイスの速度が半分になることを意味します。

私のコメントをここに編集しました (未編集) ;) そして、誰かが追加する興味深いものを持っている場合は、それを Wiki にします。

他のコメントで述べたように、2^32 (2 の 32 乗) = 4294967296、つまり 4 GB です。2^64 は 18,446,744,073,709,551,616 です。さらに詳しく説明すると (これはおそらく Hennesey & Patterson で読んだことでしょう)、プロセッサには、計算結果を保存するための「スクラッチ スペース」として使用するレジスタが含まれています。CPU は単純な演算の実行方法と、データの移動方法のみを知っています。当然のことながら、これらのレジスタのサイズは、アーキテクチャの「ビット数」と同じビット幅であるため、32 ビット CPU のレジスタは 32 ビット幅となり、64 ビット CPU のレジスタは 64 ビットになります。広い。

浮動小数点 (倍精度を処理するため) またはその他の SIMD 命令 (単一命令、複数データ コマンド) に関しては例外があります。CPU は、メイン メモリ (RAM) へのデータの読み込みとメイン メモリ (RAM) へのデータの保存を行います。CPU はこれらのレジスタを使用してメモリ アドレス (物理および仮想) を計算するため、アドレス指定できるメモリの量もレジスタの幅と同じになります。特殊な拡張レジスタを使用してアドレス計算を処理する CPU もいくつかありますが、それらはエンジニアがそれが必要であると認識した後に追加された、「後から考えたもの」と私が呼んでいます。

現時点では、実際の物理メモリをアドレス指定するには 64 ビットがかなりの量です。ほとんどの 64 ビット CPU は、実用性を考慮して、CPU をメモリに接続する際にかなりの数の配線を省略します。常に 0 が付く配線を配線するために、マザーボードの貴重な領域を使い果たすのは意味がありません。言うまでもなく、今日の DIMM 密度で最大量の RAM を搭載するには、40 億の DIMM スロットが必要になります:)

64 ビット プロセッサでは、メモリ量の増加以外に、2^32 より大きい整数の計算が高速になります。以前は、プログラマ (またはコンパイラもプログラマによってプログラムされます;) は、2 つの 32 ビット レジスタを使用し、オーバーフロー状況を処理することで 64 ビット レジスタを持つことをシミュレートする必要がありました。ただし、64 ビット CPU では、CPU 自体によって処理されます。

欠点は、64 ビット CPU (すべてが同等の場合) は、(およそ) 2 倍の回路が必要なため、32 ビット CPU よりも多くの電力を消費することです。ただし、実際には、同等の比較は決してできません。新しい CPU は、電力漏れが少なく、同じダイ サイズにより多くの回路を詰め込むことができる新しいシリコン プロセスで製造されるからです。ただし、64 ビット アーキテクチャでは 2 倍のメモリが消費されます。x86 の可変命令長はかつて「醜い」と考えられていましたが、現在では固定命令サイズを使用するアーキテクチャと比較して利点となっています。

他のヒント

を見てこの質問に答えてみましょう 人々コンピュータ;これがあなたのために何らかの光を当てることを願っています:

留意すべき事項

  • コンピュータは驚くべきものですが、非常に愚かです。

メモリ

  • 人は記憶を持っています(おそらく夫と政治家は例外です)。人は後で使用できるように情報を記憶に保存します。
    • 質問 (例: 「あなたの電話番号は何ですか?」) を使用すると、人は情報を取得して回答することができます (例: 「867-5309」)
  • 最新のコンピューターはすべてメモリを備えており、後で使用できるように情報をメモリに保存します。
    • コンピューターは愚かであるため、情報を取得するには非常に具体的な質問しかできません。「その価値は何ですか バツ あなたの記憶の中で?」
      • 上の質問では、 バツ として知られています 住所, とも呼ばれます。 ポインタ.

ここで、人間とコンピューターの間には根本的な違いがあります。メモリから情報を呼び出すには、コンピューターに 住所, 、一方、人々はそうではありません。(まあ、「電話番号」は「誕生日」とは異なる情報を提供するため、ある意味では住所であるとも言えますが、それはまた別の話です。)

数字

  • 人々は、 10 進数システム. 。つまり、10 進数の各桁は、0、1、2、3、4、5、6、7、8、または 9 のいずれかになります。人々は 桁ごとのオプション。
  • 最新のコンピューターはすべて、 二進法. 。つまり、2 進数の各桁は 1 か 0 のいずれかのみになります。コンピュータには、 桁ごとのオプション。
    • コンピュータ用語では、単一の 2 進数を「」と呼びます。 少し, 、略して bイナリーディグそれ.

住所

  • コンピュータ内のすべてのアドレスは 2 進数です。
  • コンピュータ内のすべてのアドレスには、保持できる最大桁数 (またはビット数) があります。これは主に、コンピュータのハードウェアが柔軟性に欠けていることが原因です (別名、 修理済み)、アドレスの長さはそれほど長くないことを事前に知っておく必要があります。
  • 「32 ビット」や「64 ビット」などの用語は、コンピューターが情報を保存および取得できる最長のアドレスについて話しています。英語では、この意味での「32 ビット」は、「このコンピュータは、メモリに関する命令のアドレスの長さが 2 進数 32 桁以下であることを期待している」ことを意味します。
    • ご想像のとおり、コンピュータが処理できるビット数が増えると、検索できるアドレスも長くなり、一度に管理できるメモリも多くなります。

32 ビット v.64ビットアドレッシング

  • 柔軟性のない(固定された)桁数の場合(例:2 桁の 10 進数)表現できる数値は、 範囲 (例えば。00 ~ 99、または 100 個の一意の番号)。10 進数を追加すると、範囲が 10 倍になります (例:10 進数 3 桁 -> 000 ~ 999、または 1000 個の一意の数字)。
  • これはコンピュータにも当てはまりますが、 バイナリ 代わりに機械 10進数 マシン、追加の 2 進数 (少し) 範囲が拡大するのは係数だけです 2.

    アドレス範囲:
    • 1 ビット アドレス指定では、2 つの一意のアドレス (0 と 1) について話すことができます。
    • 2 ビット アドレス指定では、4 つの一意のアドレス (00、01、10、および 11) について話すことができます。
    • 3 ビット アドレス指定では、8 つの一意のアドレス (000、001、010、011、100、101、110、および 111) について話すことができます。
    • そして久しぶりに… 32 ビット アドレス指定では、4,294,967,296 個の一意のアドレスについて話すことができます。
    • そしてその後 さらに長いです その間... 64 ビット アドレス指定では、18,446,744,073,709,551,616 個の一意のアドレスについて話すことができます。それは 多く 記憶の!

意味するところ

これが意味するのは、64 ビット コンピュータでは、 多くの 32 ビット コンピューターよりも多くの情報を得ることができます。Web の閲覧、電子メールのチェック、ソリティアのプレイなどはすべて 32 ビット アドレス指定の範囲内で快適に動作するため、ほとんどのユーザーにとってこれはあまり意味がありません。64 ビットのメリットが最も発揮されるのは、コンピューターが大量のデータを処理する必要がある領域です。デジタル信号処理、ギガピクセル写真、高度な 3D ゲームはすべて、64 ビット環境で大量のデータ処理が大幅に強化される分野です。

最新のプロセッサの多くは、次の 2 つのモードで実行できます。32 ビット モードと 64 ビット モード。32 ビット モードでは、最大 4GB のメモリにアクセスできます。64 ビット モードでは、さらに多くのものにアクセスできます。古いプロセッサは 32 ビット モードのみをサポートします。

オペレーティング システムは、次のいずれかのモードでプロセッサを使用することを選択します。インストール時に、プロセッサを 32 ビット モードで動作させるか 64 ビット モードで動作させるかを選択します。プロセッサーは 64 ビット モードで動作し続けることができますが、32 ビットから 64 ビットに切り替えるにはシステムを再インストールする必要があります。古いシステムは 32 ビット モードのみをサポートします。

アプリケーションは、32 ビット モードまたは 64 ビット モードで作成 (またはコンパイル) することもできます。プロセッサが 64 ビット モードで実行されている場合でも、エミュレーション機能として 32 ビット アプリケーションをサポートできるため、ここでの互換性はさらに注意が必要です。したがって、64 ビット オペレーティング システムでは、32 ビット アプリケーションまたは 64 ビット アプリケーションのいずれかを実行できます。32 ビット オペレーティング システムでは、32 ビット アプリケーションのみを実行できます。

繰り返しになりますが、サイズの選択は主に、アクセスするメイン メモリの量によって決まります。32 ビット アプリケーションは、システム自体にある程度のアドレス空間が必要なため、多くのシステムで 2GB に制限されることがよくあります。

パフォーマンス (速度) の観点からは、大きな違いはありません。64 ビット アプリケーションは 64 ビット ポインターを使用するため、少し遅くなる可能性があり、特定の操作でより多くのメモリ アクセスが必要になります。同時に、32 ビット プロセッサは複数の命令で 64 ビット整数演算をエミュレートする必要があるのに対し、64 ビット整数演算を 1 つの命令として実行できるため、少し高速になる可能性があります。ただし、これらの 64 ビット整数演算はかなり一般的です。

また、64 ビット プロセッサ上で 32 ビット アプリケーションを実行するとどれくらいのコストがかかるのか疑問に思う人もいるかもしれません。AMD64 および Intel64 プロセッサでは、このエミュレーション モードは主にハードウェア内で行われるため、32 ビット アプリケーションをネイティブに実行する場合と比べて実際のパフォーマンスの低下はありません。これは、32 ビット (x86) アプリケーションのエミュレーションが非常に不十分な Itanium では大きく異なります。

辺鄙な場所にある小さな町、ビンビルの話をしましょう。ビンビルにはそこに通じる道が一本あった。ビンビルに来る人も、ビンビルから出る人も、すべてこの道路を車で通らなければなりませんでした。しかし町に近づくと分岐点があった。左に行くことも、右に行くこともできます。

実際、家々に続く道を除いて、どの道にも分岐点がありました。それらの道は単に家で終わっていました。どの道にも名前はありませんでした。ビンビル計画委員会が作成した独創的なアドレス指定スキームのおかげで、名前は必要ありませんでした。これはビンビルの地図で、道路と家々が示されています。

              ------- []  00
             /
       ------
      /      \
     /        ------- []  01
-----
     \        ------- []  10
      \      /
       ------
             \
              ------- []  11

ご覧のとおり、各家には 2 桁の住所があります。その住所だけで、a) 各家を一意に識別し (重複はありません)、b) そこへの行き方を知るには十分です。街中を移動するのは簡単です。各分岐点には 0 または 1 のラベルが付けられており、計画委員会はこれをビンビル交差点トレーサーと呼んでいます。 少し 略して。最初の分岐点に近づいたら、アドレスの最初のビットを確認します。ゼロの場合は左に進みます。1 の場合は、右に進みます。次に、2 番目の分岐点に到達したら、必要に応じて左または右に移動して、2 番目の桁を確認します。

ビンビルに住んでいる友人に会いに行きたいとします。彼女はハウス10に住んでいると言います。Binville の最初の分岐点に到達したら、右に進みます (1)。2 つ目の分岐点を左 (0) に進みます。あなたがそこにいます!

ビンビルは数年間このように存在していましたが、そののどかな環境、素晴らしい公園システム、そして手厚い医療についての噂が広まり始めました。(結局のところ、道路標識にお金を費やす必要がなければ、より良いものにお金を使うことができます。) しかし、問題がありました。わずか 2 ビットなので、アドレス指定スキームは 4 ハウスに制限されました。

そこで計画委員会は知恵を出し合い、次のような計画を立てました。各住所に少しずつ追加することで、家の数が 2 倍になります。この計画を実行するには、町外れに新しい分岐点を建設し、全員が新しい住所を取得することになります。これは、町につながる新しい分岐点とビンビルの新しい部分を示す新しい地図です。

                     ------- []  000
                    /
              ------
             /      \
            /        ------- []  001
       -----                            Old Binville
      /     \        ------- []  010
     /       \      /
    /         ------
   /                \
  /                  ------- []  011
--
  \                  -------     100
   \                /
    \         ------
     \       /      \
      \     /        ------- []  101
       -----                            New Binville (some homes not built yet)
            \        -------     110
             \      /
              ------
                    \
                     -------     111

ビンビルの元の地域に住んでいる人は全員、住所の前にゼロを追加しただけであることに気づきましたか?新しいビットは、構築された新しい交差点を表します。ビット数が 1 つ増えると、アドレスの数は 2 倍になります。住民は自分たちの町の最大サイズを常に知っていました。彼らがしなければならなかったのは、2 のビット数乗の値を計算することだけでした。3 ビットの場合、2 つを持つことができます。3 = 8 軒。

数年が経ち、ビンビルは再び満席になりました。より多くの人々が移住を希望したため、(必要な交差点とともに)さらに少し追加され、町の規模は 2 倍の 16 戸になりました。それからまた少し、そしてまた少し…ビンビルのアドレスはすぐに 16 ビットになり、最大 2 ビットを収容できるようになりました。16 (16,384)軒ありましたが、十分ではありませんでした。人々は次々とやって来ました!

そこで計画委員会は、この問題をきっぱりと解決することを決定しました。32 ビットまでジャンプします。40 億以上の家庭に十分なアドレスを備えています (232)、きっとそれで十分でしょう!

そしてそうだった...約25年間、ビンビルはもはや辺鄙な場所の小さな町ではありませんでした。今や大都市となった。実際、それは数十億の住民を抱える国全体と同じくらい大きくなりつつありました。しかし、公園は依然として素晴らしく、誰もが手厚い医療を受けていたため、人口は増え続けました。

増え続ける人口に直面して、計画委員会は再び知恵を絞り、都市のさらなる拡張を提案しました。今回は 64 ビットを使用します。現在、ビンビル市の境界内に何軒の家が収まるか知っていますか?それは正しい:18,446,744,073,709,551,616。その数は非常に大きいため、地球に約 20 億個の人口が存在し、すべての人に独自の住所を与えることができます。

64 ビットの使用は、アドレス指定の問題すべてを解決する万能薬ではありませんでした。アドレスの書き込みには、古い 32 ビット アドレスの 2 倍のスペースが必要です。さらに悪いことに、一部の市民はまだ新しい 64 ビット形式を使用するように住所を更新していないため、依然として 32 ビット アドレスを使用している人専用に確保されている市内の壁で囲まれた区域に強制的に入れられました。しかし、それは問題ありませんでした。32 ビットを使用している人々は、ニーズを満たすのに十分な都市へのアクセスを持っていました。彼らはまだ変化する必要性を感じていませんでした。

64ビットで十分でしょうか?現時点では誰にもわかりませんが、ビンビルの住民は 128 ビット アドレスの発表を待っています...

マーティンの答えはほとんど正しく、詳細です。

すべてのメモリ制限は次のとおりであることだけを述べておこうと思いました。 アプリケーションごとの仮想メモリ コンピュータの実際の物理メモリの制限ではありません。実際、32 ビット システムでも 1 つのアプリケーションで 4GB を超えるメモリを操作することは可能ですが、ポインタを使用して一度にすべてのメモリにアクセスすることはできないため、より多くの作業が必要になります。 リンクテキスト

言及されていないもう 1 つの点は、従来の x86 プロセッサと x86-64 の違いはポインタ サイズだけでなく、命令セットにもあるということです。ポインターが大きくなり、より多くのメモリーを消費しますが (4 バイトではなく 8 バイト)、より大きなレジスターセット (8 バイト、iirc ではなく 15 個の汎用レジスター) によって補われるため、計算作業を行うコードのパフォーマンスは実際に向上します。

マーティンの答えは素晴らしいです。追加のポイントをいくつか追加します....NET について言及しているので、CLI/JIT には x86 と x64 の間でいくつかの違いがあり、異なる最適化 (テールコールなど) や、次のような高度なものの微妙に異なる動作があることに注意する必要があります。 volatile. 。これらはすべてコードに影響を与える可能性があります。

さらに、すべてのコードが x64 で動作するわけではありません。使うものなら何でも DirectX または 特定の COM 機能が動作しない可能性があります。実際にはそうではありません パフォーマンス 機能ですが、知っておくことが重要です。

(「DirectX」を削除しました。無駄なことを言っているかもしれません...しかし単純に:依存するものがターゲット プラットフォーム上で安定していることを確認する必要があります)

一般的なコンピューターのメモリを、数十億の正方形を持つ巨大なビンゴ カードと考えてください。ボード上の個々の正方形に対応するには、各行と列に B-5、I-12、O-52 などのラベルを付けるスキームがあります。

カード上に十分なマスがある場合、最終的には文字が足りなくなります。そのため、各マスを一意にアドレス指定し続けるために、より多くの文字を再利用し、より大きな数字を書き始める必要があります。

あなたが気づく前に、アナウンサーは迷惑なほど巨大な数字と文字の組み合わせを吐き出し、100億平方のカードのどのマスにマークを付けるかを知らせます。BAZC500000、IAAA12000000、OAAAAAA523111221

コンピュータのビット数は、特定の正方形をアドレス指定するための文字と数字の複雑さの限界を指定します。

32 ビットとは、カードが 2^32 の正方形より大きい場合、値を読み取ったり、指定されたメモリ位置に新しい値を書き込むために必要な特定の正方形を一意に物理的にアドレス指定できるようにするのに十分なワイヤとトランジスタがコンピュータにないことを意味します。

64 ビット コンピューターは、巨大な 2^64 平方を個別にアドレス指定できます。しかし、そのためには、各正方形に独自のアドレスを持たせるために、さらに多くの文字と数字が必要になります。これが、64 ビット コンピューターがより多くのメモリを必要とする理由です。

アドレス制限のその他の一般的な例としては、市内電話番号があります。通常、これらは 7 桁の 111 ~ 2222 であるか、数値 1,112,222 として再フォーマットされます。自分の電話番号を必要とする人が 9,999,999 人を超えたらどうなるでしょうか?市外局番と国番号を追加すると、電話番号の桁数が 7 桁から 10、11 桁になり、必要なスペースがさらに増えます。

IPv4 不足が差し迫っていることをご存知の方も、同じ問題を抱えています。IPv4 アドレスは 32 ビットであるため、一意の IP アドレスは 2^32 (約 40 億) 個しか存在せず、現在はそれよりもはるかに多くの人が生きています。

私が言及したすべてのスキーム (コンピューター、電話番号、IPv4 アドレス) にはオーバーヘッドがあり、特定の部分が組織目的のために予約されているため、使用できるスペースは大幅に減少します。

64 ビットの世界におけるパフォーマンスの約束は、64 ビット コンピュータが一度に 4 バイト (ABCD) を送信する代わりに、一度に 8 バイト (ABCDEFGH) を送信できるため、アルファベットがメモリの異なる領域間で最大 2 回転送されることです。 32 ビット コンピューターと同じくらい高速です。一部のアプリケーションでは、使用できるメモリが増えると実行速度が速くなるというメリットもあります。

現実の世界では、Intel などの 64 ビット デスクトップ プロセッサは実際には真の 64 ビット プロセッサではなく、依然としていくつかの種類の操作では 32 ビットに制限されているため、現実の世界では 32 ビット アプリケーションと 64 ビット アプリケーションの間のパフォーマンスは異なります。限界です。64 ビット モードでは、より多くのハードウェア レジスタを使用できるため、パフォーマンスは向上しますが、「偽の」64 ビット プロセッサでより多くのメモリを処理すると、一部の領域でパフォーマンスが低下する可能性があるため、通常は洗浄が必要になります。将来、デスクトップ プロセッサが完全に 64 ビットになると、さらにパフォーマンスが向上するでしょう。

以前の回答では「登録」という単語をあまり見たことがないと思います。デジタル コンピュータは、演算ロジックとデータとプログラムを保存するメモリを備えたレジスタの集合体です。

でもまず ...デジタル コンピュータは、2 進数 (「ビット」) 0 と 1 がスイッチの 2 つの状態 (オン/オフ) によって簡単に表現できるため、数値の 2 進数表現を使用します。初期のコンピューターは電気機械スイッチを使用していました。現代のコンピューターは、小型で高速なトランジスタを使用しています。 多くの より小さく、そして 多くの もっと早く。

CPU 内部では、スイッチは有限長のレジスタにグループ化されており、通常、操作はレジスタ全体に対して実行されます。たとえば、このレジスタをそれに追加するなどです。ご想像のとおり、32 ビット CPU には 32 ビット長のレジスタがあります。ここでは簡略化していますが、ご了承ください。

コンピューターのメモリを一連の「場所」として編成し、それぞれが CPU レジスタと同じビット数を保持することは理にかなっています。たとえば、このレジスタをそのメモリ位置からロードします。実際、記憶を次のように考えると、 バイト, 、これはレジスタの便利な部分にすぎず、一連のメモリ位置 (1、2、4、8) からレジスタをロードする可能性があります。

トランジスタが小さくなるにつれて、より複雑な演算のための追加ロジックをコンピュータ チップの限られたスペースに実装できるようになります。CPU の不動産は いつも プレミアムで。

しかし、チップ製造の改善により、わずかに大きなチップ上に、より多くのトランジスタを確実に製造できるようになりました。レジスターは長くなり、レジスター間のパスは広くなることがあります。

メモリ位置のアドレスを保持するレジスタが長くなると、より大きなメモリをアドレス指定できるようになり、データをより大きな塊で操作できるようになります。より複雑な算術ロジックと組み合わせることで、処理がより高速になります。

そしてそれが私たちなのではないでしょうか 全て 後?

32 ビット モードが 4GB の RAM にしかアクセスできない理由を説明するには、次のようにします。

アクセス可能な最大メモリ空間 = 2n バイト。n はアーキテクチャの語長です。したがって、32 ビット アーキテクチャでは、アクセス可能な最大メモリ空間は 2 です。32 = 4294967296 = 4GB の RAM。

64 ビット アーキテクチャは 2 にアクセスできます。64 = たくさんのメモリ。

これに関するTchensのコメントに気づきました。とにかく、CS の背景がなければ、コンピューターの構成やアーキテクチャの本を理解するのは、せいぜい難しいでしょう。

  • プロセッサは基数 2 を使用して数値を格納します。Base 2 が選択されたのは、おそらくすべての Base の中で「最も単純」だからです。たとえば、基数 2 の九九には 4 つのセルしかありませんが、基数「10」の九九には 100 のセルがあります。
  • 2003 年以前は、一般的な PC プロセッサは「32 ビット対応」のみでした。
    • これは、プロセッサのネイティブ数値演算が 32 ビット数値を対象としていたことを意味します。
    • より大きな数値に対して数値演算を実行することもできますが、それらはプロセッサによって実行されるプログラムによって実行される必要があり、32 ビットの演算のようにプロセッサによってサポートされる「原始的なアクション」(機械語のコマンド) ではありません。整数 (当時)
    • 32 ビットが選択されたのは、CPU エンジニアが 2 のべき乗を好むためであり、16 ビットでは十分ではなかったからです。
  • なぜ 16 ビットでは十分ではなかったのでしょうか?16 ビットでは、0 ~ 65535 の範囲の整数を表現できます。
    • 65535 = 1111111111111111 バイナリ (= 20+21+22...+215 = 216-1)
    • たとえば、病院管理ソフトウェアは 65535 人を超える患者をカウントできる必要があるため、65535 では十分ではありません。
    • 通常、整数の大きさを議論するとき、人々はコンピューターのメモリのサイズを考慮します。65535 では明らかに不十分です。コンピューターにはそれよりもはるかに多くの RAM が搭載されており、「バイト」で数えるかビットで数えるかは関係ありません。
  • しばらくは 32 ビットで十分だと考えられていました。 2003 年、AMD は最初の 64 ビット対応の「x86」プロセッサを導入しました。. 。インテルもすぐに続いた。
  • 実際には 16 ビットで十分だと考えられていました ずっと前に.
  • 多くのハードウェアとソフトウェアには下位互換性があるのが一般的です。この場合、64 ビット対応 CPU も、32 ビット対応 CPU が実行できるすべてのソフトウェアを実行できることを意味します。
    • ビジネス戦略として下位互換性を目指しています。以前のプロセッサでできることはすべてできるのであれば、より多くのユーザーがより優れたプロセッサにアップグレードすることになるでしょう。
    • CPU の下位互換性とは、CPU がサポートする新しいアクションが以前のマシン語に追加されることを意味します。たとえば、以前の機械語には「すべてのオペコードは で始まる」のような仕様があった可能性があります。 1111 将来の使用のために予約されています。」
    • 理論的には、すべてのソフトウェアを互換性のない新しいマシン言語に再コンパイルするだけで済むため、この種の CPU の下位互換性は必要ありませんでした。しかし、企業戦略や政治・経済システムのせいでそうはいきません。Utopic の「オープンソース」の世界では、マシン言語の下位互換性はおそらく問題ではないでしょう。
  • x86-64 (一般的な 64 ビット CPU のマシン言語) の下位互換性は、「互換モード」の形で提供されます。これは、新しい CPU 機能を利用したいプログラムはすべて、「64 ビット モード」で実行する必要があることを (OS を通じて) CPU に通知する必要があることを意味します。そして、新しい CPU 64 ビットの優れた機能を使用できるようになります。
  • したがって、プログラムが CPU の 64 ビット機能を使用するには、次のようにします。CPUもOSもプログラムもすべて「64ビット対応」でなければなりません。
  • 64 ビットは、世界中のすべての人にいくつかの一意の番号を与えるのに十分です。おそらく、現在のほとんどのコンピューティングの取り組みには十分な大きさです。おそらく、将来の CPU がさらに 128 ビットに移行する可能性は低いでしょう。しかし、もしそうなれば、私が想像できるすべてのことには間違いなく十分なので、256 ビットの移行は必要ありません。

これがお役に立てば幸いです。

特定のアプリケーション (例:マルチメディアのエンコード/デコードおよびレンダリング)、64 ビットを完全に活用するように作成すると、パフォーマンスが大幅に (2 倍) 向上します。

32 ビットとの比較を参照してください。64ビットベンチマーク Ubuntu そして Windows Vista

非CSの人向け。64 ビットは (あらゆる種類の) 計算に適しています。また、RAM を増やすこともできます。

また、RAM が限られている場合 (たとえば、VPS または小規模な RAM 専用サーバー)、32 ビットを選択すると、そこにあるサービスが使用する RAM が少なくなります。

上記のすべてが非常に詳細に説明されているため、これは非常に簡単な説明です。

32 ビットはレジスタを指します。レジスタとはデータを格納する場所であり、すべてのプログラムはこれを操作することで動作します。アセンブリはそれらに対して直接動作します (これが、人々がアセンブリでのプログラミングに興奮する理由です)。

32 ビットとは、基本的なレジスタ セットが 32 ビットの情報を保持できることを意味します。64 ビットとは、当然のことながら、64 ビットの情報を意味します。

なぜこれによりプログラムが高速化できるのでしょうか?より大きな操作をより速く実行できるからです。ちなみに、それは特定の種類のプログラムのみを高速化します。通常、ゲームでは最適化を大いに活用できます。 プロセッサごと, 、数学的負荷の高い演算 (したがってレジスターの使用) が原因です。

しかし面白いことに、tchen 氏が述べたように、大規模な操作を実行できるようにする「もの」は他にもたくさんあります。SSE、SSE2 などには、「32 ビット」システムであっても、64 ビット レジスタと 128 ビット レジスタがあります。

メモリをアドレス指定する機能の向上は、Windows 固有のメモリ アドレス指定システムに基づく (私が想像する) 基本レジスタ サイズの増加を直接物語っています。

それが少しでも役立つことを願っています。他の投稿者は私よりもはるかに正確です。私は非常に簡単に説明しようとしているだけです (私がほとんど知らないことが役に立ちます:)

この質問に対する素晴らしい回答はありますが、この回答ブロックにすべてが収まりません。簡単な答えは、プログラムがメモリからバイトを取得するにはアドレスが必要であるということです。32 ビット CPU では、各バイトのメモリ アドレスは 32 ビット (符号なし) 整数で格納され、最大値は 4 GB です。64 ビット プロセッサを使用する場合、メモリ アドレスは 64 ビット整数であり、約 1.84467441 × 10^19 個のメモリ アドレスが使用可能になります。プログラミングが初めての場合は、これで十分です。プロセッサの内部動作や、32 ビット CPU で 4 GB を超える RAM にアクセスできない理由よりも、プログラミングの方法を学ぶことに重点を置く必要があります。

32 ビット プロセッサでアドレス可能なメモリ範囲を説明する簡単な答えは次のとおりです。

構築できる数字が 3 桁のみであるため、最大数は 999 であると仮定します。数値の範囲は (0 ~ 999) です。使用できる番号は 1000 個だけです。

ただし、6 桁の数値を使用できる場合、作成できる最大数値は 999999 です。現在の範囲は (0 ~ 999999) です。これで、100 万個の番号を使用できるようになりました。

同様に、プロセッサ内で使用できるビット数が増え、構築して最終的にデータの保存に使用できるアドレスのセット (前の例では数値) が増加します。

これよりも単純なものであれば、読んでみると面白いでしょう。

-広告。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top