-2

私が理解しているように、「32ビット」は2 32に等しいので、32ビットOSで4GBのメモリを定義できます。また、「64ビット」は2 64であり、15EBを許可します。したがって、64ビットOSを使用すると、コンピューターにより多くのメモリを搭載できます。

しかし、私は別の点で混乱しています。

システムに(たとえば)4GBの物理メモリがあり、その4GBを32ビット整数のサイズで割った32ビットの場合、いくつかの整数(Nと呼びます)を格納できます。メモリー。また、64ビットでは、計算は4GBを64ビット整数のサイズで割ったものであるため、格納できる整数の数は半分になります。その結果、64ビットでは、同じメモリに多くの整数を格納することはできません。

これは、Microsoftが32ビットバージョンと64ビットバージョンのOSの両方でこのメモリを「4GB」として表示することで私たちをだましていることを意味しますか?

4

2 に答える 2

6

いいえ、Microsoftはどちらの場合もメモリを同じものとして表示することで不正行為を行っていません。

「32ビット」と「64ビット」は、ポインタのサイズのみを指します。どちらのタイプのシステムにも8ビットバイトがあるため、32ビットまたは64ビットのオペレーティングシステムを使用しているかどうかに関係なく、同じメモリは4ギガバイトになります。

同じサイズのバイトだけではありません。(Cで)として定義される通常の整数はint、両方のシステムで32ビットです。Windowsの場合、両方のシステムで32ビットとして定義された整数ですらlong int(Linuxでは64ビットシステムでは64ビットになります)。したがって、OSに適用される「32ビット」または「64ビット」という用語は、ポインタ以外のサイズとはほとんど関係がないことがわかります。

そして、それを超えて、コンピュータのメモリに格納されているデータのほとんどはポインタではなく、サイズを変更する場合もしない場合もある整数ですらありません。それは、画像のピクセル、文字列のバイト、またはサウンドファイルの16ビットサンプルまたはプログラムのコンピュータ命令です。それらのどれもサイズをまったく変更しません。その結果、32ビットまたは64ビットのオペレーティングシステムを使用しているかどうかに関係なく、通常、同じ量の「実際の情報」を同じ量のメモリに格納できます。

(もちろん、メモリ内の一部のデータはポインタであるという点があります。したがって、ほとんどがポインタであるものを扱う場合、64ビットオペレーティングシステムを使用すると、同じデータに対してより多くのメモリを使用することになります。非常にまれなケースですが、非常にまれです。それでも、同じバイト数のメモリであるため、さらに多くのメモリが必要になります。)

于 2012-12-23T05:16:28.673 に答える
0

x86はバイトアドレス指定を使用するため、32ビットまたは64ビットのOSに関係なく、4GBは同じ量のデータです。

メモリ使用量に関しては、x86_64は、命令サイズがあまり大きくならないように、または同じままになるように慎重に設計されています。必要なレジスタのスピルが少ないため、コードサイズがさらに短くなる場合があります。最も重要なことは、すべてのデータ型のサイズが大きくなるわけではないということです。ほとんどの操作は、引き続き32ビット変数を使用します。サイズが実際に2倍になる唯一の型は、ポインター(およびlong* nix)です。したがって、実際には、64ビットプログラムのメモリ使用量は、32ビットプログラムの2倍ではありません。

于 2013-08-15T02:03:34.777 に答える