4バイトアドレス可能なメモリ(または64ビットの8バイトアドレス可能なメモリ)ではなく、バイトアドレス可能なメモリを持つコンピュータはなぜですか?ええ、私は時にはそれが役に立つことがある方法を参照してください、それはちょうどエレガントで過度のようです。利点は充実しているのですか?バイトアドレス可能なメモリで、4バイトアドレス可能なメモリではないのはなぜですか?
答えて
プロセッサ実際にはdoアクセスメモリは64ビット(x86はPentiumなど以降)でした。 64ビットプロセッサには、しばしば128ビットバスがあります。さらに、メインメモリにアクセスすると、キャッシュライン全体を満たすバーストが発生します。これは、さらに大きなメモリユニットです。
これはバイトベースのアドレス指定だけです。オーバーヘッドがほとんどなく、過度ではありません。
今日、ネットワークプロトコルには、絶対にバイトベースのアドレス指定が必要です。ワードベースのアドレス指定でTCPを実装するのは難しいでしょう:あなたが17バイトのどこで受信した場合にread()を返すのですか?同様に、より高いレイヤーはバイトベースです: "GET/HTTP/1.0"のようなリクエストラインを4バイト単位で表示すると、HTTPの実装がかなり困難になります。基本的には、ワードをシフト操作などでバイトに分割し直す必要があります(バイトベースのアドレッシングのおかげでプロセッサはハードウェアで実行されます)。
ワードアドレスのCPUでは、ネットワークカードは各ネットワークオクテットをマシンワードに格納できます(また、その逆もあります)。あるいは、4バイトを32ビットワードにパックする(Alpha AXPのように、初期ロードでバイトロード/バイトストア命令がない)場合、TCPの例は17になります。これはソフトウェア最後の単語のパディングをシフトを使って処理します。(アルファは一種のバイト・アドレス可能でしたが、I/Oアドレス・スペースのためのいくつかのハックを伴い、32または64ビットのワード・ロード/ストアをサポートしていました。http://www.tldp.org/HOWTO/Alpha-HOWTO- 8.html) –
Alphaは後でバイトロード/ストアを追加しましたが、TCPを使用していないTCP(通常のPCIネットワークカード、AFAIKを使用)をサポートしていました。これは事実上ワードワードマシンになりましたが、64ビットアドレスの下位ビットは無視されます(または0にする必要があります)。 –
ほとんどの歴史的な理由 - CPUが理解する標準になっています。
一般的に、サイズがデータと マシン命令の両方に便利なこと に選択しなければならない:Hereは、それには良い議論です。 の共通文字を英語で、一部を 他の言語に対応するには、8ビット(256 の値)で十分です。 8ビットの プロセッサの設計者は、おそらく、 が1つのバイトとして256の共通命令をエンコードできることが「合理的な のトレードオフ」であることを見出した。そして当時、8ビットは であり、一般的に他の ピクセルカラーや の画面座標などをエンコードするのに十分でした。バイトサイズが2の累乗である であると、 が「きれいな」デザインであると感じられている可能性があります。 例えば、Marxer、E.(1974)、データ処理の要素 は、コンピュータがの たかどうかに応じて、6ビット、8ビットのいずれか ものとしてバイト を記述する、ということに注意することは興味深いこと あります"8進数"または "16進数"の型。
当然、他のサイズも使用されていました。
私たちは標準化のためにある程度のサイズを解決する必要がありました。上記のShaneが述べた理由から、人々は8ビットサイズを選択しました。それ以来、私たちはバイトアドレス可能なメモリに悩まされています。様々な互換性の問題や、OPCODESが1バイト長のみであるという事実のために変更することは不可能です。トリックを使用すると、データ/アドレスをフェッチ/ストアするためにメモリが簡単にワードアドレスになります!
- 1. 共有可能なメモリをロックする
- 2. どのような場合にメモリがバイトまたはワードでアドレス可能なのですか?なぜ
- 3. アクティベーションスタックに使用可能なメモリ?
- 4. jQueryのソート可能なテーブルが機能しないのはなぜですか?
- 5. なぜWhenAnyValueはサブスクリプションでトリガ可能なトリガですか?
- 6. C#で使用可能なメモリを取得する方法
- 7. Androidで利用可能なメモリを確認する
- 8. CompletableFuture、変更可能なオブジェクトとメモリの可視性
- 9. std :: map :: clear()が呼び出された後にメモリがまだアクセス可能なのはなぜですか?
- 10. なぜjava.lang.Longは持続不可能なのですか?
- 11. スクロール可能なのはなぜですか?
- 12. Linqの合計のメモリ効率的なGroup Byは可能ですか?
- 13. フレックス4レンダリング可能なレンダラーをレンダリング可能なドラッグハンドルでレンダリングする
- 14. iPhoneは、さらに別の解決不可能なメモリが
- 15. Linux:mmap()可能な仮想ファイル(SPIメモリなど)
- 16. JQueryUI接続可能なソート可能なソート可能なソート可能なイベント
- 17. iPhoneのメモリからパージ可能なページをパージする
- 18. Rプロセスで利用可能なメモリを増やす(または減らす)
- 19. JPAではなぜ、挿入可能で更新可能なパラメータを使用するのか?
- 20. 描画可能でない
- 21. JSONでスラッシュをエスケープ可能な文字にするのはなぜですか?
- 22. Mercurialで祖先とのマージが可能なのはなぜですか?
- 23. iphoneの利用可能なメモリの検出
- 24. メモリを保持する再利用可能なリスト
- 25. TomcatのJSF - それはなぜ可能ですか?
- 26. ActionScriptからAdobe Flashで利用可能なメモリの合計量を取得
- 27. ビデオカード:共有システムメモリと使用可能なメモリの合計をC#
- 28. ドラッグ可能なヘルパーを元のアイテムではなくソート可能なアイテムにドロップできますか?
- 29. iPhoneでプログラム可能なメモリを見つけるにはどうすればいいですか?
- 30. 高級タイプ - Scalaでは可能ですが、F#ではできないのはなぜですか?
基本的にピザを8枚にカットするのはなぜですか?あなたがピザを16スライスにカットしたのを待ってください! –