4 MBit!= 512 kB?


8

我正在使用富士通微控制器,我认为我对以下细节有些不满意,这就是为什么我问这个问题。我有以下规格:

  • 4M位闪存
  • 内置产品:MB90F345E(S),MB90F345CE(S)
  • 容量:512 KB / 256 Kwords
  • 扇区配置:64K×6 + 32K×2 + 16K×2 + 8 K×4
  • 分配的银行:F8H到FFH银行

他们似乎神奇地创建了12K字节的额外ROM存储器?我在这里想念什么怪癖?


7
512 KB = 512 * 8 Kb = 4096 Kb = 4 Mb
John Dvorak

谷歌搜索:“ 512 kb to megabit”给我512 kb = 4.096 Mbits。而且四舍五入到4 Mbits?
Evert 2014年

4
尝试使用谷歌搜索“ 512 kib到mibit”。
fgb

3
在技​​术上下文中,千字节和M位通常是指避免歧义,即千字节和兆位
njzk2 2014年

3
另请注意,在技术上,B和之间存在很大差异b。标题上所说的实际上是“ 4兆位!= 512千位?”,这当然没有意义。您想要的是4 Mbit != 512 KB?哪个更有意义,具体取决于您使用的是二进制前缀还是十进制前缀。
2014年

Answers:


16

如果看一下内存映射,实际上有524,288字节的ROM,即512K(其中“ K”表示1024,而不是1000)-顺便说一句,我通过从结束地址0xFFFFFF中减去起始地址0xF8000并加一。

http://pdf1.alldatasheet.com/datasheet-pdf/view/202599/FUJITSU/MB90F345CE/+Q035-AVDyppuuX+SHGNxD.hOS+/datasheet.pdf

那是4M(其中“ M”为1024 * 1024 = 1,048,576,不是 106 = 1,000,000)。

通常很清楚上下文发生了什么,因此这种情况很少引起混乱(尤其是在内存似乎比您预期的要多的情况下),但是,消费者磁盘驱动器容量是使用“营销” 单元使产品看起来更美观的一个臭名昭著的例子。优惠约5-10%。

编辑:正如这里的各种规范主义者所提到的那样,应该摆脱诸如MiB之类的“官方”部门,但是由于几乎没有人使用它们,我认为它们在大多数情况下可能会引起更多的混乱(显然,数据表作者感到那样)。问题是关于正确解释数据表中写的内容,而不是您自己编写数据表时应使用什么术语。


2
+1,如果您需要确切了解正在发生的事情,请始终查看内存映射(或查找不带“ k”或“ M”的统计信息)(内存选项的大小不是10%,而是2倍)。许多微米中的“ 60k”不是60 * 1024,而是通常在60000到61440之间,因为1440中的某些部分被HW寄存器占用。
尼克T

@NickT是的,有时可能存在内存映射的I / O,RAM或其他东西的“空洞”。
Spehro Pefhany 2014年

14

早期的计算机工程师选择采用SI前缀单元并对其进行调整。这些是相同的前缀,但是使用二进制而不是度量进行计数。由于2 ^ 10接近10 ^ 3,因此每个SI前缀通常将数量增加10 ^ 3,而是指增加2 ^ 10:

Prefix  Metric prefix        Binary prefix       Difference
k kilo  10^3=1,000           2^10=1,024           2.4%
M mega  10^6=1,000,000       2^20=1,048,576       4.9%
G giga  10^9=1,000,000,000   2^30=1,073,741,824   7.4%
T tera  10^12                2^40                10.0%
P peta  10^15                2^50                12.6%

这些被采纳为JEDEC标准的一部分。

这有很多好处,因为该领域的许多工作都是以2的幂进行的。但是,正如您所看到的,它们与公制不同,并且由于我们现在处理的是大量存储,因此两者之间的差异明显不同。 IEC和NIST已解决该问题。这些通过更改二进制前缀来区分两个系统:

Prefix  Binary prefix
ki kibi  2^10
Mi mebi  2^20
Gi gibi  2^30
Ti tebi  2^40
Pi pebi  2^50

这些标准于1998年首次标准化,并于2008年被采用到国际数量体系中,但是采用速度很慢,仍然有公司使用旧标准来创建新文档。在公司转行的地方,他们发现用户感到困惑,有些人转回了旧的样式。

因此,使用旧标准,4Mb是4 * 2 ^ 20位,相当于512 * 2 ^ 10字节。

在较新的标准中表示,取而代之的是4Mib = 512 kiB,假设“ b”是位,“ B”是字节。


根据这个,它在1998年被标准化
glglgl

1
它可能是一个标准,但每个人都喜欢它。如前所述,理论上,有很多较旧的文档,公司应该进行更改(您可以将其与美国转换为公制的成本进行比较)。这个问题和答案很好地提醒了我们应该使用什么术语。
艾伦·坎贝尔

@glglgl IEC和其他人在1998年对它们进行了定义,但是直到2008年,IEC前缀才被纳入国际数量体系。我已经稍微更新了答案。
亚当·戴维斯

10

在内存容量方面,MB通常表示1024KB(而不是1000K)。您可以使用MiB以避免歧义。


就是说,我听说有些硬盘制造商使用1000。有时候确实很泥泞,但实际上应该是
1024。– DKNguyen

1

2的幂与10的幂的辩论。公司为此损失了数百万美元的诉讼。二进制和十进制前缀使您每公斤丢失24位,实际上是千兆位和字节的总和。这就是为什么我的120 GB硬盘(制造商额定值)只有115.8 GB(计算机显示)的原因

http://en.m.wikipedia.org/wiki/Binary_prefix具有完整的说明。


2
不要忘记旧的“ 1.44 MB”软盘。是1.44乘以1000乘以1024字节(1,474,560字节)。双重困惑!
2014年

1

在谈论RAM,ROM或以任何方式连接到CPU总线的任何东西时:

  • 一千位是1024位。

  • 1兆位为1024千位。

  • 4兆位为4096千位。

  • 4096比特是4194304比特。

  • 1字节为8位。

  • 4194304位为524288字节

  • 1 KB是1024个字节

  • 524288字节为512千字节。

都是因为 2ñ


2
谷歌搜索“ 4兆比特至千比特”给我4000千比特?我认为这个Wiki页面解释了歧义:en.wikipedia.org/wiki/Binary_prefix
Evert

5
差异源于硬盘驱动器制造商使用1000公斤/兆等(使驱动器看起来更大),而其他所有数字存储明智地使用1024。则是为了消除这种混淆,发明了Mibibyte等(Million BInary BYTE)。
Majenko

2
-1:严格来说,我不会说“ 1 KB是1024字节”-它既可以是1000字节(ISO / IEC80000是上下文之一)也可以是1024字节(常见用法,二进制SI) ); 因此,除非您将答案中的信息(千字节等)包括在答案本身中,否则我不会同意该答案。同样,千英镑不是来自高清OEM的(尽管这对他们来说是最常见的)-来自SI前缀表,它比当今的CS和计算机早了至少半个世纪(约1950-1960年)

3
@vaxquis:半个世纪是轻描淡写。“ Kilo”源自古希腊语中的“千”,早于千年。
马克·托马斯

3
@vaxquis SI既未定义字节也未定义位,因此未定义千字节的使用。相反,它是由JEDEC标准100B.01定义的。
Ruslan 2014年

1

不幸的是,计算机行业不一致地使用了千和兆前缀。

半导体存储器往往具有两种容量,因为它使地址映射更简单。1024接近1000,因此使用半导体存储器的人开始使用千来表示1024。随着存储器大小的增加,它们也开始使用兆来表示1024 2 = 1048576千兆字节来表示1024 3 = 1073741824,依此类推。

根据千字节和兆字节的这些定义,您的制造商声明会匹配。4个二进制兆位等于4096个二进制千位等于512个二进制千字节。


但是,计算机行业的其他部门,尤其是硬盘驱动器制造商和通信接口的设计者,其原始含义使用的是SI前缀。磁盘状闪存介质的制造商也倾向于遵循这一约定。

行业的某些部门甚至将两者混为一谈,例如“ 1.44MB软盘”实际上是1.44 * 1000 * 1024 = 1474560字节

IEC在1998年尝试通过为二进制前缀引入特定名称和符号系统来解决问题,这些名称是通过采用SI单位名称的前两个字母并附加“ bi”形成的,因此kg变成了kibi,mega变成了mebi等。对于符号,添加“ i”,使k变为ki,M变为Mi等等。

但是,仅仅是因为标准组织引入了术语,并不意味着人们会实际使用它。至少以我的经验来看,以二进制表示使用公斤,兆等比使用基比,迈比等更为普遍。


1

至于其他人已经解释的,你可能会从halfcentury岁患黑客通过IEC等人,继续产生巨大的混乱。他们没有引入相同维数(或前缀)的新单位,而是重新定义了另一个广泛使用的单位(前缀)的含义,同时未能明确确定哪种定义适用于哪种上下文。

如果您遇到特定的问题,请按照上述说明检查内存映射。


但是,我敦促你们认识到更普遍的问题。
问题在于,这种说法123 kB并不能可靠地导致接受方的清晰理解。

这是语言上的遗留,也是CS词汇表的主要API缺陷。

有什么可以,我们如何解决呢?

好吧,猜猜是什么:使用二进制前缀
的含义123 kiB100%可靠地透明。
的含义123 kiB (126.0 kB)更好。
你不具备成为一个CS历史学家只是传达一些大的数字的人。
没有人关心公司,硬盘驱动器,标准机构,弃用声明等等。
这不值得。只需使用二进制兆字节。他们明确的。

有人32 kibihertz在2002年成功地说过话。出奇的方便,是吗?

最后,如果您拒绝使用二进制前缀,则会使问题变得更糟。
我们所有人可以合作以降低和修复该死的语言错误的唯一策略是降低歧义性并切换到kibi ... seconds(为什么不这样做)和其他双单元。


1
哇!我必须记得多使用kibihertz!
管道
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.