如何通过给定的地址范围计算内存大小?

16

我有一个练习,但是我无法解决它, 我有3个内存范围:

      First @      Last @ 

范围1:FD00 0000到FDFF FFFF

范围2:D000 0000到DFFF FFFF

范围3:FA00 0000到FBFF FFFF

问题是:每个范围的内存大小是多少(以兆字节为单位)?

我知道的是应该计算范围的大小=最后一个地址-第一个地址,因此第一个范围的结果为:00FF FFFF。 这是对的吗?接下来我该怎么做?我在互联网上搜索了一下,但没有找到例子。

请帮忙。

7个回答

8
在您提供的Range 1示例中,您是正确的。这是以十六进制表示的内存大小,以字节为单位。
您可以首先将00FFFFF转换为十进制数,然后将该数字的字节数转换为兆字节,从而获得最深入的见解。
要将字节转换为兆字节,请使用以下关系:
1 MB = 1 Megabyte = 1024 * 1 KB = 1,048,576 bytes.

有很多在线的十六进制转十进制的工具。Windows内置的计算器也可以进行转换。

对于其他范围,你需要再次使用减法来确定范围的大小,然后按照上面的步骤进行转换,例如:

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

经过了解这些步骤以更好地理解发生的情况,以下关系将帮助您更快地回答这些问题:
0010 0000 = 1,048,576

1MB等同于0010 0000(有时称为0x100000)。


3
抱歉,我用另一个问题来回答这个问题/ s ...

在指定范围内可用地址的数量是否包括那些范围限制器? 例如(以十进制表示我的观点)具有起始地址5和终止地址10。 仅通过减法即终止地址减去起始地址(10-5),我们得到范围为5. 但实际上在范围内有六个唯一的地址,即5,6,7,8,9,10 (因此我们应该在Julie原始问题的结果中加1吗?)

另外,存储器地址大小实际内存大小。 我们是在讨论单独的内存位置数量还是可用于存储数据的内存大小(应考虑每个位置的大小)?

如果只是内存位置,则工作已经几乎完成了(我认为这称为存储器地址大小)。 只需解决问题的MB部分(我将在最后讨论此问题)

如果是可用的存储空间,则应将其包括在内每个可寻址内存部分的大小,例如,每个地址位置包含一个未知大小的数据块。 假设每个内存位置的数据为1字节(1B),则上述示例表示内存大小为: 6(内存位置)乘以1字节(每个内存位置的体积)等于总内存大小为6B

因此,基于我的逻辑,范围1的原始问题的答案应为01000000hex(range1 = 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转换为十进制,即16,777,216,答案可能是:

  • 16MB(16777216/1024/1024=16)我猜这是老师想要的答案
  • 根据ISO标准,16.777216MB
  • 根据IEC 80000-13联合IEC / ISO标准,16 mebibytes

顺便说一下,谷歌搜索只让我对kibibytes和mebibytes有了初步的了解...如果您感兴趣,请查看https://en.wikipedia.org/wiki/Kilobyte


3

这个方程是:

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
简单来说,0-9的地址范围(地址)是多少? 答案是10,因为0也被计算在内。
因此, 容量=最后一个地址-第一个地址+1。
范围1的容量:FD00 0000到FDFF FFFF将是 FDFF FFFF-FD00 0000+1=FF FFFF+1=100 0000十六进制 或16777216十进制(16MB)。
最初的回答:简单地说,0-9的地址范围(地址)是10。容量等于最后一个地址减去第一个地址再加上1。对于范围1,其容量为FD00 0000至FDFF FFFF,即16777216十进制(16MB)。

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

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

range3 : FA00 0000 to FBFF FFFF = 32MB (0x200 0000)
It should be noted that +1 is added since both number are exclusive here

0
为了让您更容易理解,我将问题改为:2-9范围内的内存大小是多少?
答案是8,即2、3、4、5、6、7、8、9。公式为最高地址-最低地址+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 1K=1M,因此2^4 x 2^20=16 M。请对第二个和第三个问题做同样的处理。祝好运。

五年前的问题 :) 我希望您的回答能够帮助其他人,谢谢。 - Julie

0

我认为公式

size = end - begin

在编程中通常都可以使用(与其他尺寸,如裤子的腰围没有区别)。

由于十六进制和十进制的存在,内存大小会变得有些困难,其中十进制易于人类阅读,通常使用B(字节)。

为了使事情变得简单,如果您安装了bc,您可能想尝试一下:

echo 'ibase=16;yourendhex-yourbeginhex' | bc

在你的情况下

echo 'ibase=16;FDFFFFFF-FD000000' | bc
echo 'ibase=16;DFFFFFFF-D0000000' | bc
echo 'ibase=16;FBFFFFFF-FA000000' | bc
16777215  #16MB
268435455 #268MB
33554431  #34MB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接