1. 程式人生 > >為什麼實際大小和佔用空間不一樣

為什麼實際大小和佔用空間不一樣

1.“檔案大小”與“所佔空間”的差別
為了便於大家理解,我們先來看兩個例子:
例1:找到D盤上的Ersave2.dat檔案,用滑鼠右鍵單擊該檔案,選擇“屬性”,即可開啟對話方塊,我們可以看到,Ersave2.dat的實際大小為655,628 Byte(位元組),但它所佔用的空間卻為688,128 Byte,兩者整整相差了32KB。
例2:同樣是該檔案,如果將它複製到A盤,你會發現該檔案實際大小和所佔空間基本一致,同為640KB,但位元組數稍有差別。再將它複製到C盤,檢視其屬性後,你會驚奇地發現它的大小和所佔空間的差別又不相同了!
顯然,在這三種情況中,檔案的實際大小沒有變化,但在不同的磁碟上它所佔的空間卻都有變化。事實上,只要我們理解了檔案在磁碟上的儲存機制後,就不難理解 上述的三種情況了。檔案的大小其實就是檔案內容實際具有的位元組數,它以Byte為衡量單位,只要檔案內容和格式不發生變化,檔案大小就不會發生變化。但文 件在磁碟上的所佔空間卻不是以Byte為衡量單位的,它最小的計量單位是“簇(Cluster)”。

小知識:什麼是簇?
檔案系統是作業系統與驅動器之間的介面,當作業系統請求從硬盤裡讀取一個檔案時,會請求相應的檔案系統(FAT 16/32/NTFS)開啟檔案。扇區是磁碟最小的物理儲存單元,但由於作業系統無法對數目眾多的扇區進行定址,所以作業系統就將相鄰的扇區組合在一起, 形成一個簇,然後再對簇進行管理。每個簇可以包括2、4、8、16、32或64個扇區。顯然,簇是作業系統所使用的邏輯概念,而非磁碟的物理特性。
為了更好地管理磁碟空間和更高效地從硬碟讀取資料,作業系統規定一個簇中只能放置一個檔案的內容,因此檔案所佔用的空間,只能是簇的整數倍;而如果檔案實 際大小小於一簇,它也要佔一簇的空間。所以,一般情況下檔案所佔空間要略大於檔案的實際大小,只有在少數情況下,即檔案的實際大小恰好是簇的整數倍時,文 件的實際大小才會與所佔空間完全一致。

2.分割槽格式與簇大小
在例2中,同一個檔案在不同磁碟分割槽上所佔的空間不一樣大小,這是由於不同磁碟簇的大小不一樣導致的。簇的大小主要由磁碟的分割槽格式和容量大小來決定,其對應關係如表1所示。
筆者的軟盤採用FAT分割槽,容量1.44MB,簇大小為512 Byte(一個扇區);C盤採用FAT 32分割槽,容量為4.87GB,簇大小為8KB;D盤採用FAT 32分割槽,容量為32.3GB,簇大小為32KB。計算檔案所佔空間時,可以用如下公式:
簇數=取整(檔案大小/簇大小)+1
所佔空間=簇數×磁碟簇大小
公式中檔案大小和簇大小應以Byte為單位,否則可能會產生誤差。如果要以KB為單位,將位元組數除以1024即可。利用上述的計算公式,可以計算ersave2.dat檔案的實際佔用空間。

3.輕鬆檢視簇大小
①用Chkdsk檢視簇大小
在Windows作業系統中,我們可以使用Chkdsk命令檢視硬碟分割槽的簇大小。例如我們要在Windows XP下檢視C盤的簇大小,可以單擊“開始→執行”,鍵入“CMD”後回車,再鍵入“C:”後回車,然後輸入“Chkdsk”後回車,稍候片刻從它的分析結 果中,我們就可以得到C盤的簇大小,不過它把簇稱之為“分配單元”或者“Allocation unit”。
②用PQ Magic等磁碟工具來檢測
很多磁碟工具都具備磁碟資訊顯示等功能。例如在PQ Magic中,選擇要檢視的磁碟分割槽,然後單擊右鍵選擇“高階→調整簇大小”功能,即可從顯示的對話方塊中可以看到該磁碟當前設定的簇大小。
③手工檢視
手動建立一個100位元組以下的文字文件。然後將該檔案複製到欲檢視簇大小的磁碟分割槽中,在Windows下顯示該檔案的屬性,其中“所佔空間”處顯示的數值就是簇大小.
參考資料:
http://cnbbs.us/simple/t28666.html
 

相關推薦

為什麼實際大小佔用空間一樣

1.“檔案大小”與“所佔空間”的差別 為了便於大家理解,我們先來看兩個例子: 例1:找到D盤上的Ersave2.dat檔案,用滑鼠右鍵單擊該檔案,選擇“屬性”,即可開啟對話方塊,我們可以看到,Ersave2.dat的實際大小為655,628 Byte(位元組),但它所佔用的空間卻為688,128

檔案大小佔用空間的區別(為什麼檔案大小佔用空間一樣大)

1.“檔案大小”與“所佔空間”的差別為了便於大家理解,我們先來看兩個例子:例1:找到D盤上的Ersave2.dat檔案,用滑鼠右鍵單擊該檔案,選擇“屬性”,即可開啟對話方塊,我們可以看到,Ersave2.dat的實際大小為655,628 Byte(位元組),但它所佔用的空間

Windows10系統C盤檔案實際大小佔用空間可用空間一致(相差差8到20G)

WIN10系統C盤佔用和檔案實際大小不一致。【差20G找不到】  綜合討論區  >  一般性問題討論區 問題 0 登入進行投票 新買的電腦,預裝WIN10家庭版64位。 剛剛開機,進行了一次重置。 C盤右鍵屬性顯示“已佔用54.

分區實際大小顯示一致

分區文件 lsof生產環境中有時候會遇到磁盤中文件並不大但是卻使用了大量的空間,可能原因刪除了服務正在加載的文件,但是沒有重啟服務,可使用lsof | grep delete查看是否有刪除的文件加載在服務的列解決辦法:重啟服務本文出自 “xiaoxiaozhou” 博客,請務必保留此出處http://xiao

磁碟可用空間佔用空間上的問題

新公司的測試機磁碟空間空餘很小,日誌很多,也很大,做個日誌壓縮指令碼,在夜裡4:30自動執行,第二天後發現磁碟空間又滿了,只好刪除沒用的日誌,清空空間,可詭異的是怎麼刪除沒用的檔案,空間還是佔用很大。如圖 用du 根目錄下,發現這些檔案加一塊也達不到佔用的空間大小。如圖 我也有遇見過此類問題,一般

壓縮Sqlite資料檔案大小,解決資料刪除後佔用空間變的問題

最近有一網站使用Sqlite資料庫作為資料臨時性的快取,對多片區進行劃分Sqlite資料庫檔案,每天大概新增近1萬的資料量,起初效率有明顯的提高,但歷經一個多月後資料庫檔案從幾K也上升到了近160M,資料量也達到了40多萬條,平均每一條資料佔用了 4K的空間,雖然使用上的效

跟張忠謀纏鬥了20年 稱芯片代工是自己的創意(做研究經營事業一樣,他的話多,但意見很多,有大格局)

偉大的 太陽能 數字 .html 太陽 亦或 檢查 download 臺灣經濟 半導體業內尊稱張忠謀為“半導體代工之父”,但一個人卻對這一說法嗤之以鼻。【1】臺灣雙雄,這個曾經聲震全球半導體的名詞,如今已經不復存在。2016財年,臺積電實現營收207

js 小數計算為啥想象中一樣

++ fix 我只 font 解決辦法 都沒有 丟失 解決辦法。 所有 今天遇到了一個比較有趣的事,如果要你計算0.1+0.2等於多少你會怎麽回答? “0.3啊!”你可能都不會考慮。我也一樣,當a=0.1,b=0.2時 if(a+b === 0.3){

mybatis學習筆記(3)—資料庫bean名稱一樣處理方案

之前寫的mybatis物件的bean物件和資料庫的物件名稱是對應的,然而再實際開發的過程有很多不一一對應的情況。就需要解決。 bean物件: package com.test.bean; /* * javabean 物件 */ public class order { pr

解決BootStrap輪播圖片中圖片大小父div一致問題

問題出現 其實這個問題相當簡單,自己鼓搗好久,才發現還是自己基本功不紮實,當圖片的大小出現在原生的bootstrap類屬性限定中,圖片會按照自己的大小進行佈局,這樣就會出現圖片小於父div的情況,如下圖所示: 問題解決 找出圖片所屬類,更改類的屬性為blo

winform窗體執行時的大小設計時一致

窗體設定的尺寸為1946*850,而電腦解析度是1920*1280 按說寬度已經超過螢幕大小很多了,應該顯示佔滿螢幕寬度才對,但是執行時寬度只有設計時的一半 高度最多隻能是1946畫素,再拉大也不管用,而高度可以設定 解決辦法,把窗體的AutoScaleMode改為None 這個屬性的意思是:確定當螢

Zxing 掃描後獲取的圖片大小輸入框一致

最近開發專案中,二維碼掃描功能採用的google的Zxing掃描,發現一個問題:掃描後,會在掃描框停留一下,再跳轉到下個介面,同時,掃描得到的圖片會在掃描框中呈現,但是圖片的大小卻只有掃描框的1/4不到,體驗很不好。 方法一:修改返回圖片的大小 這塊的返回邏輯做的比較複雜,但是起始設定大

Android studio模擬器尺寸真機一樣的原因

平時喜歡直接用Android studio自帶的模擬器Nexus 5X進行除錯   發現UI介面效果和真機測試出來的介面不一樣   我真機用的是華為P10 plus,dp尺寸是360*640的 模擬器解析度為1080*1920px按理來說也是360*640dp

[從0到1搭嵌入式工程]嵌入式應用層判斷SD卡是否存在,獲取大小剩餘空間

1,判斷是否存在     如果sd卡裝置存在, 在生成/sys/block/mmcblk0/device/cid檔案,存放sd卡的cid資訊, 同目錄下type檔案可以判斷卡型別,如果裝置只支援sd卡,就不需要判斷型別了。     在程式碼中使用popen執行命令:cat /

java -version顯示版本JAvA_HOME配置一樣

當你需要安裝多個版本的jdk時,可能會遇到更改了JAVA_HOME後java -version不變的情況。 一般情況下,將你的JAVA_HOME改為你要用的jdk的安裝路徑,然後你使用的就是這個版本的JDK。但是有時候你會發現更改了JAVA_HOME後java -version不變。 可能原因: path

Sqlserver 資料庫檔案大小剩餘空間

在MS Sql Server中可通過以下的方法查詢出磁碟空間的使用情況及各資料庫資料檔案及日誌檔案的大小及使用利用率: 1、查詢各個磁碟分割槽的剩餘空間: Exec master.dbo.xp_fixeddrives; 2、查詢資料庫中的所有資料庫名:

mybatis解決實體類欄位名表列名一樣的問題

Book類有成員變數:bookName,price book表有列名:book_name,price 解決方法一:在BookMapper.xml檔案的sql語句中使用別名 例如: <select id="getAllBooks" resultType="Book">

解決Sqlite資料庫,資料刪除後佔用空間變的問題

sqlite資料庫庫檔案在使用過後,隨著資料的增多,檔案大小也會隨之變大。但是在把所有表中資料刪除以後發現sqlite資料庫檔案大小沒有變化,還是佔用原來大小的空間。 造成這種情況的原因是:sqlite在之前使用的時候,隨著資料的插入,會分配磁碟空間來供使用,在刪除資料以後

shell指令碼直接執行crontab結果一樣

問題描述: 案例1. 以前寫了個更新svn然後cp到別外一個目錄(簡稱目錄a)的指令碼,達到另外一個目錄的程式定期svn同步的效果。(當然,你可能要問為啥目錄a不裝個svn up,這個你可以先不管) 指令碼寫好後,執行沒有問題,結果放到crontab中定時跑,卻怎麼也不行

Java JavaScript語法一樣的地方

  1、if和while  條件判斷   Java嚴格要求布林表示式   JS很寬鬆,可以是布林表示式,也可以是數學表示式  0表示true 其他都是false   2、foeEach迴圈  Java  for(資料型別  迴圈變數:集合或者陣列) JS的格式是:for(迴