web-dev-qa-db-ja.com

アドレスの範囲を指定してメモリのサイズを計算する方法は?

私はそれを解決できなかったというエクササイズがあり、3つのメモリ範囲があります:

      First @      Last @ 

範囲1:FD00 0000からFDFF FFFF

range2:D000 0000からDFFF FFFF

range3:FA00 0000からFBFF FFFF

問題は、各範囲(メガバイト)のメモリサイズを指定することです。

私が知っていることは、範囲のサイズ=最後のアドレス-最初のアドレスを計算する必要があることです。これにより、最初の範囲の結果は00FF FFFFになります。これは正解?それから私は何をすべきですか?インターネットで検索しましたが、例は見つかりませんでした

助けてください

8
Julie

範囲1の例では、あなたは正しいです。これは、16進数で示されたメモリのサイズ(バイト単位)です。

最初に00FF FFFFを10進数に変換し、次にそのバイト数をメガバイトに変換することにより、最も洞察を得ることができます。

バイトからメガバイトに変換するには、次の関係を使用します

1 MB = 1 Megabyte = 1024 * 1 KB = 1,048,576 bytes.

オンラインの16進数から10進数へのコンバーターはたくさんあります。 Windowsに組み込まれている計算機も変換を実行できます。

他の範囲についても、減算を行って範囲のサイズを決定し、上記の手順を適用します。

 FBFF FFFF
-
 FA00 0000
 ---------
 01FF FFFF

何が起こっているのかをよりよく理解するためにこれらの手順を実行した後、次の関係により、そのような質問にすばやく答えることができます。

0010 0000 = 1,048,576

したがって、1MBは0010 0000と同じです(0x100000と呼ばれることもあります)。

5
Eric J.

方程式は

second_add - first_add + 1

fdff ffff - fd00 0000 + 1 = 0100 0000 = 2^24 = 2^4 * 2^20 = 16Mbyte [2^20 byte = 1 Mbyte] 
2
user7606761

申し訳ありませんが、別の質問で質問に回答するには...

指定された範囲内で利用可能なアドレスの数も、それらの範囲リミッターを含めて含まれていませんか?例: (私のポイントを説明するために10進数で)開始アドレス5、終了アドレス10。減算のみ、つまり終了アドレスから開始アドレス(10-5)を差し引いた場合、5の範囲が得られます。範囲、つまり、5、6、7、8、9、10(したがって、ジュリーの元の質問の減算の結果に1を追加する必要がありますか?)

また、メモリアドレスサイズ実際のメモリサイズ。個別のメモリロケーションの数、またはデータを格納するために利用可能なメモリのサイズ(それぞれのロケーションのサイズを考慮する必要があります)について話しているのですか?

ちょうどメモリの場所であれば、これでほぼ完了です(これをメモリアドレスサイズと呼びます)。質問のMB部分を解決する必要があります(この問題については最後に説明します)。

使用可能なストレージスペースの場合、これには、メモリのアドレス可能な各部分のサイズが含まれます。各アドレス位置には、未知のサイズのデータ​​チャンクが保持されます。上記の例よりもメモリロケーションごとのデータが1バイト(1B)である場合、メモリサイズは次のとおりです。メモリサイズは、6(メモリロケーション)に1バイト(各メモリロケーションのボリューム)を掛けたもので、合計メモリサイズは6Bです。

したがって、私の論理に基づいて、範囲1の元の質問に対する答えは01000000hex(範囲1 = FDFF FFFF-FD00 0000 + 1 =01000000h)。

その範囲のメモリサイズに関しては、これは私が本当に混乱するところです。..これは、特定の数のメモリロケーション、つまり1000000hであり、各ロケーションのサイズは未定です。では、なぜMBまたはGBでそれを表現するのか。各メモリの場所のサイズがわかっている場合(および場所の数に各場所のサイズを掛けると)、その範囲のメモリサイズがわかり、数値形式で表すことができます。

私たちが本当に混乱しているのは、MB、GBなどの使用です。各プレフィックスは1024の倍数に相当するため、しばしば引用されます。 1KB = 1024Bytes、1MB = 1024kBなどですが、IEC推奨される慣習は、ISO規格に基づいています(今の私のグーグルによると)、Kilo(kB)= 1000、Mega(MB)= 1000000など.

したがって、各場所の不明なサイズを別にして、1000000hを10進数に変換します。つまり、16,777,216です。答えは次のいずれかです。

  • 16MB(16777216/1024/1024 = 16)これが疑わしいIS先生の答えIS AFTER
  • 16.777216MB(ISO規格による)
  • 16メビバイト(IEC/ISO共同規格に準拠-IEC 80000-13)

ところで、グーグルは単にキビバイトとメビバイトについて私を教育しただけです(最近では部分的に意味するように解釈されるかもしれません)...興味があれば、チェックしてください https://en.wikipedia.org/wiki/Kilobyte

簡単な例えで、0から9の範囲(アドレス)とは何ですか?範囲/アドレス0がカウントされるため、答えは9ではなく10です。

したがって、容量=最終アドレス-最初のアドレス+ 1。

範囲1の容量:FD00 0000からFDFF FFFFは、FDFF FFFFになります-FD00 000 + 1 = FF FFFF + 1 = 16進数で100 0000または16進数で16777216(16MB)。

0
Rusj

わかりやすくするために、質問を次のように変更するだけです。2〜9の範囲のメモリのサイズはどれくらいですか。

答えは次のように8です。2、3、4、5、6、7、8、9。式は、最高アドレス-最低アドレス+ 1です。

最初の問題の範囲1の場合:FD00 0000からFDFF FFFFまで、答えは00FF FFFF + 1 = 0100 0000H = 1 X 16 ^ 6 = 1 X(2 ^ 4)^ 6 = 2 ^ 24 = 2 ^ 4 x 2 ^ 20です。バイナリシステムの場合、2 ^ 10 = 1024 = 1Kおよび2 ^ 20 = 1K x 1 K = 1M、次に2 ^ 4 x 2 ^ 20 = 16 Mです。2番目と3番目の問題については、親切に同じことを行ってください。幸運を。

0
Dahlan Sitompul
range1: FD00 0000 to FDFF FFFF:
  FD FF FFFF 
- FD 00 0000
------------
  FF FFFF = 1MB (0x100 0000)

range2 : D000 0000 to DFFF FFFF = 256MB (0x1000 0000)

range3 : FA00 0000 to FBFF FFFF = 32MB (0x200 0000)
0
ashish