关于比如在D盘里有一文件,我感觉从D盘复制到E盘比剪切要快些,感觉是对的吗?还是确实是这样的?其中有什么原因呢?(其它的因素都忽略)。的问题
说下x86的文件系统吧。x86的文件系统在硬盘上面是用双向链表的数据结构来存取的。这是解决此问题的关键!
详细分析一下:
情况1:
从X盘某一文件夹剪到X盘另一文件夹。x86文件系统是采用更改链表前置和后继所指向硬盘地址来实现的。因为单纯的前置和后继的更改非常快(只需要写入地址),所以几乎感觉不到等待时间。
情况2:
从X盘某一文件夹复制到X盘另一文件夹。此操作除了要修改前置和后继之外,还要向硬盘写入数据实体。故速度要明显慢于情况1。
情况3:
从X盘某一文件夹剪切到Y盘某一文件夹。对于此操作,操作系统需要首先检查Y盘上是否有足够的空间来存放X盘文件。
然后进行链表的整体复制,最后将X盘上的链表(前置&后继&数据实体)清空。
情况4:从X盘某一文件夹剪切到Y盘的某一文件夹。此操作最后无需将X盘上的链表删除,所以速度要稍微快一点。
补充一下删除和剪切最后一部删除链表的区别吧。删除对于操作系统而言(这里指shift+del的直接删除,由于回收站的存在,如果不直接删除情况会复杂些),只需要把XXX。
YYY文件的前置所指向的结点的后继修改为null就可以了。而剪切则多一部清空数据实体。绝对不像你讲的那样多一步删除操作。因为单纯的删除操作所需时间是很短的。那么下面又会有一个问题,为什么删除一个大文件比删除一系列小文件(总容量和大文件差不错)要快很多呢?想想就知道了,删除一个文件,实际上只需要修改一次结点的后继,而删除一系列文件就。
。。明白了吧?
希望不懂的人不要在这里误导。也许计算机系的专业课很无聊,但是要解释一个计算机上的现象,还是要从最理论最无聊的东西着手。