你可能不知道的 NTFS 檔案佔用磁碟大小 (Size On Disk) 原則有段關於 1KB 是 1024 Bytes 的補充說明,意外獲得不少讀者迴響(在此感謝),讓我活到老學到老,又補充了一些新知識。

我們平日用來表示檔案大小、記憶體或磁碟容量的單位: KB(Kilobyte)、MB(Megabyte)、GB(Gigabyte)、TB(Terabyte),其實存在著歧義。同樣說 KB/MB/GB、有時講的是以 1000 單位的國際單位制(KB/MB/GB/TB),有時則是指以 1024 當成千的二進位儲存單位 (KiB/MiB/GiB/TiB)。

  • 1 KB = 1,000 Bytes
  • 1 MB = 1,000 KB
  • 1 GB = 1,000 MB = 1,000,000 KB
  • 1 TB = 1,000 GB = 1,000,000 MB = 1,000,000,000 KB
  • 1 KiB = 1,024 Bytes
  • 1 MiB = 1,024 KiB
  • 1 GiB = 1,024 MiB = 1,048,576 KiB (1024 * 1024 = 1048576)
  • 1 TiB = 1,024 GiB = 1,048,576 MiB = 1,073,741,824 KiB (1024 * 1024 * 1024 = 1073741824)

電子與通訊領域一直以來就慣用 K、M、G 這些符號表達千、百萬及十億,例如:無線網路訊號頻率 2.4 GHz、CPU 頻率 4.77 MHz、數據機傳輸速度 33.6 Kbps (kilo bits per second,每秒 1000 位元)、10K 歐姆電阻... 等等。十進位換算簡便,符合人類習慣,像十進位的公制就比非十進位的英制受歡迎,成為國際統一標準(目前僅剩美國、緬甸與賴比瑞亞還在用英制,冷知識),因此國際電工委員會(IEC)建議在表示傳輸速度、記憶體容量、光碟容量採等用 K/M/G/T 等字首表示千、百萬、十億、兆等量級,與 CPU 頻率 (如 i7 930 2.80GHz)、電腦效能衡量單位 GFLOPS 一致。

十進位符合人類思考,卻不符合電腦二進位特性。電腦世界由 0 與 1 組成,當用 10 位元儲存記憶體位址,若充分利用每個位元可定義出 1024 個不同地址,沒理由為了方便人腦換算捨去 24 個不要。於是乎將 1024 視為千、1024 x 1024 當成百萬,可與電腦二進位特性完美融合,設計硬體或寫程式時不需轉換,能無縫接軌。對工程師及開發人員來說,記憶體、儲存空間用 1024 計算是順應天意。而為了與 KB/MB/GB/TB 區分,國際電工委員會(IEC)於 1998 年制定了 1024 制的 Kibibyte、Mebibyte、Gibibyte、Tebibyte 等單位,其中的 bi 象徵 Binary,與使用 1000 的 KB/MB/GB/TB 有所區隔,這些單位可簡寫成 KiB、MiB、GiB、TiB。

只是在日常溝通上,這兩種單位常被混用,例如,當我們說 CPU 有 64K L1 Cache 時,指的是 65536 Bytes 而不是 64000 Bytes,1MB L2 Cache 也不是 1,000,000,而是 1,048,576:

買了 256G SSD,裝進 Windows 看到的容量只有 238.46G:

原因出在磁碟機廠商的 GB 依循 IEC 標準,一千是 1000;而 Windows 所謂的 GB 嚴格來說是 GiB,以 1024 計算。若 SSD 實際大小是 256,000,000,000,256*1000*1000*1000/1024/1024/1024 = 238.4186。這個數字與實際看到的 238.46G 仍有點誤差,是因為 Windows 偵測到的容量並非 256,000,000,000。想得到精確數字可用 wmic diskdrive get size 指令:

以精確數字計算 256,052,966,400/1024/1024/1024 = 238.4679,故得證。

實務上算這麼準沒啥意義,基本上 GB 乘 0.93、TB 乘 0.91 抓近似值就可以了。(109 / 230 = 0.9313、1012 / 240 = 0.9094)

Windows 的 KB/MB/GB 其實是 KiB/MiB/GiB,但並非所有作業系統都是如此,像是 macOS 的 GB 就是 1000 制的,故你會看到容量足 1TB 的 SSD:


圖片來源:Apple 官方文件

在 Linux 磁碟及檔案大小 GB、MB 也是 1000 制:


註:1,921,972 bytes = 1.921 MB = 1.833 MiB

有些用 1024 的場合甚至會標示 KiB:

巡完一輪,大致的心得:

  1. 若要嚴謹定義:KB/MB/GB 是以 1000 為千單位,若要表示 1024 當成千,應使用 KiB/MiB/GiB。
  2. Windows 顯示儲存容量的 KB/MB/GB,其實是 KiB/MiB/GiB
  3. 磁碟機、SSD、記憶卡廠商的 GB/TB 是 1000 制,故當 Windows 將 GiB/TiB 值顯示成 GB/TB 時就會變少,故不時會有消費者誤會廠商偷斤減兩, 例如:買了 256GB SSD 在 Windows 裝好容量只剩 238.47 GB (簡單換算:GB * 0.93、TB * 0.91)
  4. DRAM 記憶體規格說的 MB/GB 其實也是 MiB/GiB,但大家都有共識它們就是 1024 制,很少有爭議。 依此標準,會出現「市售 32GB DRAM 比 32GB 記憶卡容量多 7%」的現象。
  5. macOS、Linux 的檔案、磁碟大小的 MB/GB 為 1000 制,有些地方會標示 KiB/MiB 以示區隔。


Comments

# by 小黑

nice

# by Cu

Great knowledge

Post a comment