現在、コンピュータの基礎を理解しようと、
メモリとは何か?というところを勉強しています。
データ(命令)を1バイトずつ区切ってメモリアドレスを割り振り、メモリに格納されたデータをCPUが1行ずつ読みだして処理していくという基本的なことは理解しました。
32ビットプロセッサの場合、一度の処理で4バイトずつ処理が可能なため、メモリ空間には1行に4バイトずつデータが格納されているという認識であっていますでしょうか。(メモリ空間のアドレスが4バイトずつ増えるのもそのため?)
また64ビットプロセッサの場合はどのようになるのでしょうか。
おかしい質問をしてしまっていたらすみません。
なかなかイメージしづらく、認識の確認のために質問させていただきました。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
メモリーには論理的には行というのは存在しません。
番地(アドレス)が付いていますが、現在一般的なCPUでは、CPUのビット数にかかわらず、1バイト(8ビット)毎にアドレスが1ずつ増えていきます。
32ビットCPUでも64ビット単位のデータを扱う命令もあるし、64ビットCPUでも32ビットや8ビットのデータを扱う命令もあります。
CPUが、32ビットデータをまとめて読み込む場合は、4つ連続したメモリ上のデータを読み込みます。
投稿2021/05/23 08:48
総合スコア85949
0
ベストアンサー
厳密に言うと微妙な部分もあるかとおもいますが、なるべくざっくりした説明で書きますね。
他の方の回答にもあるように、メモリーには行といった考え方は本来ないのです。
言ってみれば「ながーい紙テープのようなものに、1ビットの情報が書き連ねられている」と思ってください。その1ビットは、0か1、実際には電気が溜まっているか、溜まっていないかという情報が記録されています。ざっくりいうと、以上終わり、です。
で、これをコンピューターとして使おうとする際に、紙テープからどこのビットを読むかを指定しやすいように、テープ上の場所に通し番号を打ったものが、アドレスです。
で、あるアドレスから、CPUなどが情報(01の連なり)を切り出して使う際に、毎回長さがまちまちだと大変なので「決まった長さで切り出すようにしよう」ということになり……その切り出す長さが8ビットだったり、16ビットだったり、32ビットだったり、64ビットだったり、というのが「~ビット」という数値です。
なので「~ビット」というのは、切り出した情報を入れる「情報の入れ物」のサイズとも一致します(CPUなどの用語だとレジスター、プログラミングだと変数のデータサイズとほぼ一致)。
アドレスが4バイトずつ増える、ってのは、あれですね、メモリーを長方形に描いた図などの左に書かれているアドレスのことですね。これは、上記のように「長いテープのような」メモリーでは表現しづらいので、上記のようにデータを切り出す長さごとに折り返して表現することが通例となっています。なので、32ビットコンピューターが主流のころだと、「横32bit=4bytes」でテープを折り返して積み重ねるように表現して、縦長の長方形で描くと、質問主さんのおっしゃる「行」ごとのアドレスが4バイトずつ増える縦長の表になります。
これは、人間が判りやすいよう便宜的にそう描いただけで、実際のメモリーは1本のテープのようになっており、特に行や区切りといったものは有りません。
なんとなくおわかりでしょうか?疑問の解消になるかどうかは判りませんが、理解の足しになれば幸いです。
なお、この「アドレス」という通し番号もコンピューターの中で情報として扱う必要があるので、アドレス用の情報の入れ物が用意されています。このサイズも、コンピューターが32bitなら32bitサイズ、64bitなら64bitサイズになっていますので、32bitコンピューターだと、アドレスの上限は32bitで表現出来る数値になってしまい……それがだいたい4GB弱になる。なので「32bitコンピューターではメモリーは4GBまでしか認識できない」みたいなことになります。
また、たとえば32bitで情報を扱う場合、その情報をコンピューター内で転送したり移動したりする必要があります。その際に「32bitのデータを一気に運べるように電線を32本並べて繋げよう……」ということで、繋いだ32本の電線による情報の通り道が「バス」です。その「バス」の電線の数が32本の場合「バス幅32bit」、64bitの場合「バス幅64bit」となります。
いろいろと情報が絡み合った話になるので混乱しがちな部分ですが、理解しておくとプログラミングや、システムの設計、規模の見積もりや運用など、いろんな部分でじわじわと効いてくる部分です。皆さんの話も含めて参考にされた上で、イメージを掴んでおかれると役に立つと思います。がんばってくださいねー。
投稿2021/05/24 00:30
編集2021/05/24 00:39総合スコア534
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/27 02:41
2021/05/28 00:19
0
32ビットプロセッサの場合、一度の処理で4バイトずつ処理が可能
「最大で」4バイトずつと解釈して、
一般的な命令ではそうですが、既出のようにSIMD系の命令ではもっと大量に読みます。
メモリ空間には1行に4バイトずつデータが格納されているという認識であっていますでしょうか。
現代のCPUではメモリ空間はだいぶ仮想的な存在なので、それを考えることにあまり意味はありません。
1行4バイトだと思ってアクセスしてもいいですし、1行8バイトだと思っても2バイトだと思ってもよいです。メモリコントローラあたりがよしなに扱ってくれます。
ただ、4バイトのデータを読む時4の倍数の番地からでないと読めなかったり読めるが速度が下がるといったことはあります。
物理的なメモリモジュールのデータバス幅について言えば、
32bitCPUになってからも一般的なメモリモジュールのバス幅はPentium(初代)のときに32bitから64bitに変わったりしていますし、
今さら聞けないメモリーの基礎知識 DIP~DIMM編
デュアルチャンネルで128bit相当にすることができたりします。
デュアルチャネル
まあ、基礎ということなので、CPUからメモリバスが直接生えておりメモリの仮想化をしておらずキャッシュもないようなごく単純なCPUを考えるなら、32bitCPUならデータバス幅は32bit(=メモリ空間は1行に4バイト)となるのが自然だろうとは思います。
(メモリ空間のアドレスが4バイトずつ増えるのもそのため?)
何についての話をしているのか分かりません。
また64ビットプロセッサの場合はどのようになるのでしょうか。
CPUによって違います。例えばRISC-Vでは32bitと64bitで単純に全てのメモリアクセス命令の幅が増えますが、x86-64では64bit幅のアクセスはx86の32bit幅のアクセスより制限が多かったように記憶しています。
投稿2021/05/23 13:21
総合スコア3047
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
データ(命令)を1バイトずつ区切ってメモリアドレスを割り振り
そんな仮想的?なものじゃなくて、この辺はおおよそ物理的な「部品」と対応しているから、68000(16bit CPU)あたりで自分でコンピュータを組み立ててみれば嫌でも理解できるけどねぇ...って、68000の単品チップなんて今どき売ってないか。
投稿2021/05/23 11:53
編集2021/05/23 12:02総合スコア7703
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/23 12:33
2021/05/23 12:37
2021/05/23 13:38
2021/05/23 22:15
0
32ビットCPUの場合は、一度に処理できる最大サイズが4バイトです。それ以下の場合もありえます。
ただし、掛け算の場合は繰り上がりの結果も含めて8バイトを考える必要があります。これは複数のレジスタを組み合わせることで実現しています。
以下追記
最大サイズは言い過ぎでしたね。専用命令とか特殊な演算もあるので、必ずしもではないです。いずれにしても、4の倍数とは限りません。
投稿2021/05/23 09:26
編集2021/05/23 12:54総合スコア4830
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/23 09:53
2021/05/23 11:23
2021/05/23 12:36
2021/05/23 13:00
2021/05/23 13:07 編集
2021/05/23 13:23
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。