蓝猫淘气三千问:神奇的1byte

562 阅读3分钟

这是我参与更文挑战的第14天,活动详情查看: 更文挑战

今天发现一个很有趣的问题,同样一个1字节文件在mac和windows里面,显示的占用空间是不一样的。

文件

mac

windows

可以看出1.txt里面只写入了数字1,但是在mac里面,文件大小实际上是1字节,这个是毫无疑问的,问题是它占用了4kb的磁盘空间。

没错,如你所料的,这跟最小存储单元有关,mac的文件系统是APFS。

Apple 文件系统 (APFS) 是运行 macOS 10.13 或后续版本的 Mac 电脑所使用的默认文件系统。

APFS系统的最小存储单元是4k,尽管实际上我们的1.txt只有一个字节,但是也需要占用4k的空间。

到这里一切都非常合理,索性看看windows下表现是怎样的,结果出乎意料,居然显示占用了0字节,这是怎么回事?

首先我们需要知道windows的文件格式有哪些?

FAT16格式

FAT16格式是自DOS、Windows 3.x以来广泛使用的硬盘分区格式,是传统的16位文件系统。它有极好的兼容性,DOS、Windows 、Windows NT的各种版本,以及其他各类操作系统都支持FAT16。它相对速度快, CPU资源耗用少,所以至今仍是各类机器硬盘常用的分区格式。但是传统FAT16的不支持长文件名,受到8+3,即8个字符的文件名加3个字符扩展名的限制。单个分区的最大尺寸为2GB,单个硬盘的最大容量一般不能超过8GB,所以如果硬盘容量超过8GB,8GB以上空间则因无法利用而浪费。

FAT32格式

FAT32是Windows 95 OSR2版开始推出兼容16位的32位文件系统。最大特点为使用较小的簇(每簇仅为4KB)分配文件单元,大大提高硬盘空间利用率,减少了浪费。单个硬盘的最大容量达到2TB(1TB=1024GB),为海量硬盘的使用者提供了方便。它支持长文件名,能很好运行 DOS、Windows 95-2000的各种版本,但系统开销要大于FAT16。这种文件系统的安全性仍然较差。目前,支持这一磁盘分区格式的操作系统有Win 97、Win 98和Win 2000/XP。但是,这种分区格式也有它的缺点,首先是采用FAT32格式分区的磁盘,由于文件分配表的扩大,运行速度比采用FAT16格式分区的硬盘要慢;另外,由于DOS系统和某些早期的应用软件不支持这种分区格式,所以采用这种分区格式后,就无法再使用老的DOS操作系统和某些旧的应用软件了。

NTFS文件系统

NTFS具有FAT的所有基本功能,并提供了优于FAT和FAT 32文件系统的特点:更好的文件安全性和更大的磁盘压缩。 支持大磁盘,最大可达2tb(NTFS的最大驱动器容量远远大于FAT的最大驱动器容量,并且随着驱动器容量的增加,NTFS的性能并不下降,这与FAT有很大不同)。

这三种文件格式的顺序,也代表了文件系统的变迁顺序,目前windows系统基本上都在使用NTFS系统。

NTFS会为每个文件分配1KB的索引空间用来记录文件的基本信息。不过这个空间通常用不完,于是如果文件内容少,Windows就会把内容直接写到索引空间里空余的地方,看上去就是不占硬盘空间了,当然如果文件增加了,就会把内容从索引空间里移出去分配磁盘空间保存。

所以就产生了上面的结果。

发现问题,寻找答案的过程真让人沉醉~