zoukankan      html  css  js  c++  java
  • 为什么对计算机存储单位(K,M,G,T)换算,总是糊里又糊涂?

    对于计算机专业的童鞋来说,大概对计算机存储单位换转换不算陌生,但是往往有力不从心总是感到迷迷糊糊。原因是不同书本、不同领域对他们的定义不尽相同。比如,计算机网络中1Kb=1000b,而操作系统和计算机组成原理中却用1Kb=1024b,1Mb=1024Kb 。。。,一般来说软件厂商如微软用1024,硬件厂商用1000。
    文章:http://news.csdn.net/n/20071030/110069.html(转)
    词头加在SI单位(非SI单位也可以使用并通常遵循此用法)之前表示10的整数幂次,譬如k表示10^3=1000,M表示10^6=1,000,000,G则表示10^9=1,000,000,000.   举些例子,1kg=1000g,1km=1000m,1GeV=1,000,000,000eV=1,0

    硬盘厂商将1GB定义为1,000,000,000B的常规做法又一次成为了争论的焦点。为了帮助对此有疑惑的网友搞清楚一些容易混淆的背景情况,草成此短文。水平有限,如有错误或是火星之处还请口下留情。
      先明确一个关键问题,什么是G,什么是M?
      G和M是国际单位制(SI)中所规定的词头(prefix)。词头加在SI单位(非SI单位也可以使用并通常遵循此用法)之前表示10的整数幂次,譬如k表示10^3=1000,M表示10^6=1,000,000,G则表示10^9=1,000,000,000.
      举些例子,1kg=1000g,1km=1000m,1GeV=1,000,000,000eV=1,000MeV,都是大家所熟悉的用法。24K金那个K和SI可没关系,24K的K也不是词头,因为后面没有单位。

      回到正题上来,虽然B并不是SI单位,但考虑到SI前缀不应用于2的幂次的明确要求,此处1GB应该是10^9B=1000*10^6B=1000MB。从这个意义上来说,硬盘厂商的标注没有错。

      那么经常听到的1GB=1024MB的说法是怎么来的?这就要从计算机的童年时代说起。

      起先计算机的存储容量低到可怜,几千个Byte算是很奢侈的容量,由于计算机的二进制特性,这个容量通常是2的整数次幂,用起来不方便。IT工程师们发现 2^10=1024与k=10^3接近,相差不过2%。于是就有人偷懒以1kB表示2^10B也就是1024B,初看起来一切都好,2%的差距并不大,时间长了大家也就接受了。

      但问题在于,随着计算机的存储容量依摩尔定律(Moore’s Law)以指数增长,这个差值会越来越大。1kB与1KiB(稍后解释)相差不过2%,1MB与1MiB相差近5%,1GB与1GiB相差7%,1TB和 1TiB足足差了10%。可以预见,随着硬盘容量的进一步扩大,希捷为了这几个字母复杂多变的含义所吃的官司会越来越多。

      时至今日,在IT业中已经形成了如下的这种混乱局面:

      CPU厂商计算频率时认为1GHz=10^9Hz,内存厂商认为1GB=2^30B,硬盘/闪存则是1GB=10^9B,微软则坚持认为1GB= 2^30B。通信工程师们认为千兆以太网的位速率是1Gbit/s=10^9bit/s,32bit 33.3MHz的 PCI在一个周期内可以传输4Byte,带宽也就成了133.3MB=133.3*10^6B。更有甚者还有混着用的:1.44MB软盘的容量是奇怪的 1474560B。80柱面*2磁头*18扇区一共是2880个512B的扇区,于是就被叫成了1.44MB。如果我买了一台电脑拥有2.4GHz的 CPU/2GB的内存/320GB的硬盘/双GbE,那么这4个G中,唯独第2个的含义与众不同。

      看来当初的偷懒做法和造成千年虫问题的节约搞法一样愚蠢是么?确实如此。

      为了解决这个混乱的局面,还是有人做过努力。早在1998年SI手册中明确要求SI词头不应用于2的幂次。而同年国际电工委员会(IEC)推出了一套适用于2进制的词头,并且得到了IEEE的批准 (IEEE 1541)——不过这还是一个试用的标准。简单来说就是在SI词头后加"i"。比如说k就成了Ki,M成了Mi,G成了Gi。发音把原来SI词头的第二个音节换成[bi]。譬如Ki念 [kibi],Mi念[mebi],Gi则是[Gibi]等等依此类推。这样,kMG之类的的SI词头回复原来的含义,表示2幂次重任就交给了Ki= 2^10=1024,Mi=2^20=1048576,Gi=2^30=1073741824等等。这么一来,当表述一台电脑是3.15GHz CPU/2GiB内存/320GB硬盘时,G/Gi的含义就不存在歧义。

      很简明易懂的解决方案,然而很不幸似乎买IEC帐的着实不多,目前支持IEC词头的软件屈指可数——可喜的是其中包括Linux核心。更糟糕的是1G= 1024M这种约定俗成的错误观念已经根深蒂固。如果说千年虫问题到2000年就基本告一段落,而kMGTP这几个普普通通的字母带来的混乱,还会持续多久呢?

  • 相关阅读:
    JS变量的作用域
    使用jquery修改css中带有!important的样式属性
    js异步加载的三种解决方案
    js 停止事件冒泡 阻止浏览器的默认行为(阻止超连接 # )
    【翻译】MongoDB指南/CRUD操作(二)
    【翻译】MongoDB指南/CRUD操作(一)
    【翻译】MongoDB指南/引言
    深入浅出UML类图(一)
    让thinkphp 5 支持pathinfo 的 nginx ,去掉index.php
    linux 常用命令
  • 原文地址:https://www.cnblogs.com/lumnm/p/2342374.html
Copyright © 2011-2022 走看看