みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

32ビットCPUは物理、仮想メモリを含めて4Gまでしかメモリをもてないんですか?

いくつか質問があるのでお願いします。まず、表題にあるとおり32ビットCPUは本当に物理、仮想メモリを含めて4Gまでしかメモリをもてないんですか?
【第一の質問です】


 32ビットCPUでいう32ビットとは一般的にCPUのレジスタのサイズのことですよね。(もしかしたら、一度に32ビットのサイズでデータを処理できるという表現のほうが正しいのかもしれませんが,,)

 で、次に第二の質問なんですが突き詰めると、このレジスタのうちのどこのレジスタが32ビットなんですか?

 CPUが次に読み込むべき、メモリの住所(位置)をあらわす、いわゆるメモリアカウンタントのことですか?それともレジスタ全体そのもののことでしょうか?
【これが第二の質問です】

 三番目は(1)の質問がYESだとする前提で質問を行います。
 4Gという数字は2の32乗のことだというのはわかっているのですが、実際メモリが仮想メモリー(HDDへのスワップ領域)も含め4Gという容量で足りるのですか?

いくらCPUの演算部で先に処理が完結したものからHDDに退避させるとはいえ、4Gという数字は少々、少なすぎる気がするんですがどうでしょうか?
【三番目の質問です】
 
 答えられるものだけでいいので、教えてください。どうかお願いします。

投稿日時 - 2005-10-24 23:24:36

QNo.1733923

暇なときに回答ください

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

一般論としては、「32ビットCPUはメモリを4GBまでしか扱えないか?」の答えは否、です。例えば、通常Pentium4は32ビットCPUと呼ばれますが、64GBまでのメモリを直接扱うことができます。

また「32ビットCPU」と呼ばれる所以である「32ビット」が何のビット幅を指しているのかは非常に曖昧です。汎用レジスタの幅であったりメモリアドレッシングの幅であったり、CPUチップそのものから出ているデータ入出力信号の幅であったりします。

3番目については、例えばWindowsでは1プロセスあたりの仮想メモリ空間が4GBに制限されますが、この制限のために非常にプログラムの作成に苦労したことが実際にあります。

小手先の処理で何とか4GB(アプリケーション用には2GB)の仮想メモリ空間に収めましたが、100GBくらい仮想メモリ空間が欲しい処理を行うものでした。物理メモリは1GBもあれば十分だったのですが。

現在4GBというメモリ空間は分野によってはかなり手狭なものになっており、64ビットOSの真のメリットもそこにあります。

投稿日時 - 2005-10-25 00:03:46

ANo.2

1、x86CPUは、実際には36bitのアドレスを持ち、最大64GBまで扱えます。
むしろこの場合の4GBとは、OS側の設計による影響であるとも言えます。実際、Windows2000Advanced Serverは8GB、Datacenter Serverでは64GBのメモリをサポートします。

ただし、一つのプロセスがフラットに扱えるメモリの量は4GBです。

参考資料:Windows 2000とは何か?(改訂新版) 11.Windows 2000 Serverの概要(4)
「Windows 2000 Advanced Serverの機能」あたりが詳しいでしょうか。
http://www.atmarkit.co.jp/fwin2k/special/whatiswin2k_rev1/server4.html

第二ですが、これはどちらかというと、実は32bitプログラミングにおける、C言語で言うところのポインタの問題だったりするような気がします。だから、仮想記憶上のアドレス、という事で良いと思います。32bitプログラミングでは、メモリは(少なくとも一つのプロセスでは)4GBまでですよ、という事で互換性を保つ方法を取っていると考えて良いのではないでしょうか。

参考資料:ポインタとメモリと型(構造体)の関係 (1)
http://www.mm2d.net/c/c-14.shtml

3、えーと…これは前提が変わっていると思いますからちょっとアレなんですが、実際にメモリは(少なくとも普通のユーザが使ってるマシンでは)最大4GBまでしか積めないし、実際それでなんとかしてます。これはHDDのスワップ領域も含め4GBです。それどころか、通常はシステム領域で2GBまで、ユーザ領域で2GBまでです。

一応私専門家のつもりですが、システム管理が専門です。
この質問に本当に答えるには、おそらくプログラミングの知識を(スクリプトレベルではなく)理解している必要があると思います。という事で「自信なし」

投稿日時 - 2005-10-24 23:56:32

ANo.1

1. 32bitはデーターバスのサイズです。
  一つのアドレスで扱えるデーターが32bitですから、レジスタを使用するCPUの場合、レジスタのサイズも32bitにしています。
2. 1つのレジスタのサイズです。全体では有りません。
アドレスとも無関係です。
3. データーバスの幅とアドレス空間は無関係です。
  あと、4Gって 非常に広大な空間と思いますが。
  一昔前だとHDDの容量ですらそんなに無かったんですよ。

投稿日時 - 2005-10-24 23:53:16

あなたにオススメの質問