与更大的块大小相比,较小的块大小导致较低的内部碎片。如果我们允许使用典型的块大小值(2的倍数),即512,1024或2048字节,是否有可能使用更小的块大小与更大的块大小相比具有更多的内部碎片?当增加块大小时内部碎片会增加吗?
0
A
回答
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
相关问题
- 1. 当我增加图像大小时td大小不会增加
- 2. 增加块大小会降低性能
- 3. 增加大小部件
- 4. 增加大小
- 5. 增加大小
- 6. 增加大小
- 7. 属性会增加实例的内存大小吗?
- 8. 增加堆大小
- 9. 增加sc_fifo_out大小
- 10. 当我增加字体大小/更改字体类型时,为什么按钮大小会增加?
- 11. 当我增加字体大小div边框的大小也在增加
- 12. 如何增加UITextView的字体大小当UITextView的大小增加
- 13. 在js中增加图片大小
- 14. 添加div时的大小增加
- 15. 如何增加IIS resopnse块大小
- 16. 增加交换大小如何增加堆大小?
- 17. Dagger 2增加APK大小吗?
- 18. 我可以增加JPanel的大小吗?
- 19. 增加时屏幕字体大小小
- 20. 增加clipPath大小会导致滞后
- 21. 变量不会增加增量值吗?
- 22. 增加可折叠内容的大小
- 23. 动态增加内容大小
- 24. 在eclipse中增加内存大小
- 25. 如何增加phpmyadmin的内存大小
- 26. 如何增加内存大小
- 27. Java堆大小增加进出内存
- 28. .Java错误(内容大小增加)
- 29. C:#include增加内存大小?
- 30. 当div内容增加时,主容器div的高度不会动态增加
什么是“内部碎片”? –