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個扇區。顯然,簇是作業系統所使用的邏輯概念,而非磁碟的物理特性。
為了更好地管理磁碟空間和更高效地從硬碟讀取資料,作業系統規定一個簇中只能放置一個檔案的內容,因此檔案所佔用的空間,只能是簇的整數倍;而如果檔案實際大小小於一簇,它也要佔一簇的空間。所以,一般情況下檔案所佔空間要略大於檔案的實際大小,只有在少數情況下,即檔案的實際大小恰好是簇的整數倍時,檔案的實際大小才會與所佔空間完全一致。

相關推薦

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

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

轉 opacity() rgba() 的區別?display visibility 有什麽不同?

支持 body text position frame alpha pla 引擎 操作 一.背景介紹: 1.大家在寫頁面時,會用到各種元素,比如div, img等等。有時候一張頁面會放好幾張圖片,圖片如果顯示效果都一樣,看起來很單調,整個頁面給人的感覺會很硬。那麽

版本管理(一)之GitGitHub的區別(優點缺點)

機制 最大 客戶 內核 文件 敏捷 star 一定的 sch Git 簡介 https://www.yiibai.com/git/getting-started-git-basics.html Git 是一個開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的

Java集合:List、SetMap的區別,ArrayListLinkedList有何區別..........

一、陣列和集合的區別:   陣列是大小固定的,並且同一個陣列只能存放型別一樣的資料(基本型別/引用型別);   集合可以儲存和操作數目不固定的一組資料。 所有的JAVA集合都位於 java.util包中! JAVA集合只能存放引用型別的的資料,不能存放基本資料型別。   陣列和集合相比唯一的有點就是速度

displayvisibility的區別以及迴流重繪

display:none會脫離文件流,不佔據頁面空間; visibility:hidden,只是隱藏內容,並沒有脫離文件流,會佔據頁面的空間。 講述迴流以及重繪之前需要先了解頁面在文件載入完成之後到完全顯示中間的過程: 1.根據文件生成DOM樹(包括display:none的節點) 2.在D

errorexception的區別,RuntimeException非RuntimeException的區別

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Oracle資料庫備份,expexpdp的區別,impimpdp的區別

oracle資料庫備份 1: 建立dmp匯出目錄  create directory 目錄名 as '目錄路徑' 2: 檢視當前建立的所有dmp匯出目錄 select * from dba_directories 3: 備份 expdp 使用者名

CC++的區別:new /delete malloc/free

幕布分享: https://mubu.com/doc/vQfZHGsDG0 動態分配記憶體: 在程式執行中進行的,而不是在編譯就確定的 new 堆上分配記憶體 (1) 開闢T位元組大小空間: Tp =new T; size: sizeof(T)    

iOS中self.property _property的區別,initdealloc為何避免用self.property

一、self.property訪問 1、self.property 經過oc訊息派發,可以完成屬性所定義的“記憶體管理語義”, 例如copy屬性; 2、通過屬性訪問,可以設定斷點除錯。   二、_property直接訪問例項變數 1、_property直接訪問例項變

type介面class的區別(型別類)

Class public final class Class < T > implements java . io . Serializable, GenericDecla

oracle inexist的區別 not in not exist的區別

in 是把外表和內表作hash join,而exists是對外表作loop,每次loop再對內表進行查詢。一般大家都認為exists比in語句的效率要高,這種說法其實是不準確的,這個是要區分環境的。 exists對外表用loop逐條查詢,每次查詢都會檢視exists的條件語句,當 e

python2python3的區別之inpuraw_input的區別

python2:input和raw_input的區別,raw_input會把輸入的任何內容都當做字串來處理, 剛開始做if判斷的時候,a和b都是整數,沒有問題,後面a是通過raw_input接收的,就不能比較了,a是str,b是int python3已經廢棄raw_input input

PHP5.6 PHP7.0區別 PHP5.6 PHP7.0區別

PHP5.6 和PHP7.0區別   1. PHP7.0 比PHP5.6效能提升了兩倍。 2.PHP7.0全面一致支援64位。 3.PHP7.0之前出現的致命錯誤,都改成了丟擲異常。 4.增加了空結合操作符(??)。效果相當於三元運算子。 5.PHP7

Arraylistlinkedlist的區別,hashmaphashtable的區別,hashmaphashset的相同與不同,hashcode的用法

Arraylist和linkedlist的區別 相當於陣列和連結串列的區別:當arraylist中新增物件時對應的陣列長度就要改變,因此便於查詢(直接get(i)就ok)而不利於增刪改;相反linkedlist相當於連結串列可以進行增刪改,但是查詢要從第一個節點開始會浪費時

sizeofstrlen的區別,陣列指標的區別

sizeof和strlen的區別: 1.sizeof是個關鍵字,因此,sizeof後面是變數名時可以不加括號,而strlen是個函式,必須加括號 2.sizeof是判斷引數所佔的記憶體大小,引數可以是型別,函式,而strlen有點像計數器,從某個記憶體地址開始計數,碰到"\

Java中==equals的區別,equalshashCode的區別

在java中: ==是運算子,用於比較兩個變數是否相等。 equals,是Objec類的方法,用於比較兩個物件是否相等,預設Object類的equals方法是比較兩個物件的地址,跟==的結果一樣。Ob

ConcurrentHashMaphashTable的區別、HashMapTreeMap區別

ConcurrentHashMap集合了hashmap和hashtable 這兩張表的優勢: hashtable 每次操作都會鎖住真個結構 ConcurrentHashMap 鎖的方式是稍微細粒度 把資料分為了16個桶,每次get put remove 等操作,只需要對對應的

Python中列表的方法:append()extend()的區別還有pop()remove()的區別

1、 append()和extend()的區別append 和extend都是列表的方法之一,共同點都是在列表的左後新增列表的元素,區別在於append()是將要新增的物件作為一個整體新增到列表中,被新增的物件最終做為原列表的一個元素,extend()方法則是將一個可迭代物件

runnablethread的區別以及runstart的區別(多執行緒)

在java中可有兩種方式實現多執行緒,一種是繼承Thread類,一種是實現Runnable介面;Thread類是在java.lang包中定義的。一個類只要繼承了Thread類同時覆寫了本類中的run()方法就可以實現多執行緒操作了,但是一個類只能繼承一個父類,這是此方法的

PEARPECL的區別及PCREPOSIX的區別

/**************by garcon1986*******************/ PEAR (PHP Extension and Application Repository)PHP擴充套件與應用程式庫。 PEAR是“一個可重用PHP元件的框架和釋出系統