0

与更大的块大小相比,较小的块大小导致较低的内部碎片。如果我们允许使用典型的块大小值(2的倍数),即512,1024或2048字节,是否有可能使用更小的块大小与更大的块大小相比具有更多的内部碎片?当增加块大小时内部碎片会增加吗?

+0

什么是“内部碎片”? –

回答

4

这是一个很好的问题。

让我试着回答:

内部碎片是字节的“废物”,进行数据分配内存时。如果块大小是例如512字节,你的数据只能存储1个字节,会有511个字节被浪费掉,随着更大的块大小而增长。

另一方面,外部碎片是浪费了使用块之间的内存空间。例如:存储块A,B和C的块大小为1 KB。 如果使用A和C,并且应该存储大小为2 KB的数据,则块B不能用于此目的。所以,这就是为什么我们必须对我们的硬盘进行碎片整理,并将数据更有效地结合在一起。

正如你问:是否有更小的块大小可以有更多的内部碎片,答案应该是:这取决于你通常会保存什么。

让我们做一些计算:

Block size: 512 byte 
Data to store: 64 kbyte 
Blocks needed: 128 
Internal fragmentation: 0% 

Block size: 512 byte 
Data to store: 64,1 kbyte 
Blocks needed: 128,2 
Internal fragmentation: 80% of 1 block 

-- 

Block size: 2048 byte 
Data to store: 64 kbyte 
Blocks needed: 32 
Internal fragmentation: 0% 

Block size: 2048 byte 
Data to store: 64,1 kbyte 
Blocks needed: 32,05 
Internal fragmentation: 95% of 1 block 

-- 

Block size: 4096 byte 
Data to store: 64 kbyte 
Blocks needed: 32 
Internal fragmentation: 0% 

Block size: 4096 byte 
Data to store: 64,1 kbyte 
Blocks needed: 16,025 
Internal fragmentation: 97,5% of 1 block 

所以,它取决于你拯救什么。你永远不会有任何系统,其中文件将始终具有平均大小。总会有大文件和许多小文件,所以需要权衡。

对于大块大小,您将有更多的内部碎片整理,但外部碎片会更好(因为保留块之间会有很多空间)。另一方面,小块大小会增加外部碎片的大小,但内部会更小。

一般来说,较大的块大小总是会增加内部碎片。 Best是块大小,内部碎片,磁盘访问时间和页表大小之间的折衷。

+0

一个例外,我想到:如果将有大量的小文件,就像一个探索性的PC一样,这将创建数千个字节大小的文件,例如,您可以考虑减小块大小以避免过多内部碎片。 – ConcurrentHashMap